package kiyut.swing.shell.image; import java.awt.Dimension; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.awt.image.ImageObserver; import java.io.File; import java.util.Iterator; import javax.imageio.ImageIO; import javax.swing.Icon; import javax.swing.JLabel; /** Image utilitis class. It provides provides static methods for manipulating Images * * @version 1.0 * @author tonny */ public class ImageUtilities extends java.lang.Object { /** scale the image proportionally to fit the supplied width & height * if the image is smaller than width & height then nothing change * @param img the image * @param width the width to which to scale the image * @param height the height to which to scale the image. * @param ob the ImageObserver object * @return new Image */ public static BufferedImage scaleImageToFit(BufferedImage img, int width, int height,ImageObserver ob) { double scale; Dimension src = new Dimension(img.getWidth(ob),img.getHeight(ob)); Dimension dest = new Dimension(width,height); scale = scaleToFit(src,dest); double w = img.getWidth(ob) * scale; double h = img.getHeight(ob) * scale; //BufferedImage scaledImage = img.createGraphics().getDeviceConfiguration().createCompatibleImage((int)w,(int)h); BufferedImage scaledImage = new BufferedImage((int)w,(int)h,BufferedImage.TYPE_INT_ARGB); Graphics2D g2 = scaledImage.createGraphics(); g2.drawImage(img,0,0,(int)w,(int)h,ob); g2.dispose(); return scaledImage; } /** Return the scale value from <code>src</code> to <code>dest</code> *@param src source dimension *@param dest destination dimension *@return the scale value */ public static double scaleToFit(Dimension src, Dimension dest) { //System.err.println("------------------------------"); //System.err.println(src.width + " " + src.height); //System.err.println(dest.width + " " + dest.height); double srcW = src.getWidth(); double srcH = src.getHeight(); double destW = dest.getWidth(); double destH = dest.getHeight(); double scale = 1; if (srcW > srcH) { if (srcW > destW) { scale = destW / srcW; } srcH = srcH * scale; if (srcH > destH) { scale = scale * (destH / srcH); } } else { if (srcH > destH) { scale = destH / srcH; } srcW = srcW * scale; if (srcW > destW ) { scale = scale * (destW / srcW); } } return scale; } /** Return whether the file is a known image file or not * It is use ImageIO to determine the file type * @param file the file to be queried * @return true if it is know image file type, otherwise false */ public static boolean isFileImage(File file) { boolean b = false; String suffix = getFileSuffix(file); if (suffix != null) { Iterator it = ImageIO.getImageReadersBySuffix(suffix); b = it.hasNext(); } return b; } /** Return file suffix portion of give file. * @param file the file to be queried * @return suffix (eg: jpg,gif,etc) or null * @deprecated replaced by ShellUtilities.getFileSuffix() */ public static String getFileSuffix(File file) { String suffix = null; // get suffix if (file.isFile()) { String filename = file.getName(); int indexOf = filename.lastIndexOf("."); if (indexOf > 0) { suffix = filename.substring(indexOf+1).toLowerCase(); } } return suffix; } /** Returns a <code>BufferedImage</code> representation of the icon. * @param icon the icon * @return <code>BufferedImage</code> representation of the icon */ public static BufferedImage iconToBufferedImage(Icon icon) { int w = icon.getIconWidth(); int h = icon.getIconHeight(); BufferedImage tempImage = new BufferedImage(w,h,BufferedImage.TYPE_INT_ARGB); Graphics2D g2 = tempImage.createGraphics(); icon.paintIcon(new JLabel(),g2,0,0); g2.dispose(); return tempImage; } }