/* * ome.logic.QueryImpl * * Copyright 2006 University of Dundee. All rights reserved. * Use is subject to license terms supplied in LICENSE.txt */ package ome.logic; // Java imports import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.awt.image.ColorModel; import java.awt.image.WritableRaster; import org.slf4j.Logger; import org.slf4j.LoggerFactory; // Third-party libraries // Application-internal dependencies import ome.api.IScale; /** * Provides methods for scaling buffered images. * * @author Chris Allan      <a * href="mailto:callan@blackcat.ca">callan@blackcat.ca</a> * @version 3.0 <small> (<b>Internal version:</b> $Rev$ $Date$) </small> * @since 3.0 * */ public class AWTScaleService implements IScale { /** The logger for this class. */ private static Logger log = LoggerFactory.getLogger(AWTScaleService.class); /* * (non-Javadoc) * * @see ome.api.IScale#scaleBufferedImage(java.awt.image.BufferedImage, * float, float) */ public BufferedImage scaleBufferedImage(BufferedImage image, float xScale, float yScale) { int thumbHeight = (int) (image.getHeight() * yScale); int thumbWidth = (int) (image.getWidth() * xScale); log.info("Scaling to: " + thumbHeight + "x" + thumbWidth); // Create the required compatible (thumbnail) buffered image to avoid // potential errors from Java's ImagingLib. ColorModel cm = image.getColorModel(); WritableRaster r = cm.createCompatibleWritableRaster(thumbWidth, thumbHeight); BufferedImage thumbImage = new BufferedImage(cm, r, false, null); // Do the actual scaling and return the result Graphics2D graphics2D = thumbImage.createGraphics(); // graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION, // RenderingHints.VALUE_INTERPOLATION_BILINEAR); graphics2D.drawImage(image, 0, 0, thumbWidth, thumbHeight, null); return thumbImage; } }