Mega Code Archive

 
Categories / Java / 2D Graphics GUI
 

Image Utils

/**  * Balloontip - Balloon tips for Java Swing applications  * Copyright 2007, 2008 Bernhard Pauler, Tim Molderez  *   * This file is part of Balloontip.  *   * Balloontip is free software: you can redistribute it and/or modify  * it under the terms of the GNU Lesser General Public License as published by  * the Free Software Foundation, either version 3 of the License, or  * (at your option) any later version.  *  * Balloontip is distributed in the hope that it will be useful,  * but WITHOUT ANY WARRANTY; without even the implied warranty of  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the  * GNU Lesser General Public License for more details.  *  * You should have received a copy of the GNU Lesser General Public License  * along with Balloontip.  If not, see <http://www.gnu.org/licenses/>.  */ import java.awt.Graphics; import java.awt.GraphicsConfiguration; import java.awt.GraphicsDevice; import java.awt.GraphicsEnvironment; import java.awt.HeadlessException; import java.awt.Image; import java.awt.Transparency; import java.awt.image.BufferedImage; import java.awt.image.ColorModel; import java.awt.image.PixelGrabber; import javax.swing.ImageIcon; /**  * Some methods for use with an Image  * @author Tim Molderez  */ public class ImageUtils {      /*    * Disallow instantiating this class    */   private ImageUtils() {};      /**    * This method returns true if the specified image has transparent pixels    * This snippet was taken from: http://www.exampledepot.com/egs/java.awt.image/HasAlpha.html    * @param image    * @return True if the image has any transparency    */     public static boolean hasAlpha(Image image) {         // If buffered image, the color model is readily available         if (image instanceof BufferedImage) {             BufferedImage bimage = (BufferedImage)image;             return bimage.getColorModel().hasAlpha();         }              // Use a pixel grabber to retrieve the image's color model;         // grabbing a single pixel is usually sufficient          PixelGrabber pg = new PixelGrabber(image, 0, 0, 1, 1, false);         try {             pg.grabPixels();         } catch (InterruptedException e) {         }              // Get the image's color model         ColorModel cm = pg.getColorModel();         return cm.hasAlpha();     }      /**    * This method returns a buffered image with the contents of an image    * This snippet was taken from: http://www.exampledepot.com/egs/java.awt.image/Image2Buf.html    * @param image    * @return The buffered image    */     public static BufferedImage toBufferedImage(Image image) {         if (image instanceof BufferedImage) {             return (BufferedImage)image;         }              // This code ensures that all the pixels in the image are loaded         image = new ImageIcon(image).getImage();              // Determine if the image has transparent pixels; for this method's         // implementation, see e661 Determining If an Image Has Transparent Pixels         boolean hasAlpha = hasAlpha(image);              // Create a buffered image with a format that's compatible with the screen         BufferedImage bimage = null;         GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();         try {             // Determine the type of transparency of the new buffered image             int transparency = Transparency.OPAQUE;             if (hasAlpha) {                 transparency = Transparency.BITMASK;             }                  // Create the buffered image             GraphicsDevice gs = ge.getDefaultScreenDevice();             GraphicsConfiguration gc = gs.getDefaultConfiguration();             bimage = gc.createCompatibleImage(                 image.getWidth(null), image.getHeight(null), transparency);         } catch (HeadlessException e) {             // The system does not have a screen         }              if (bimage == null) {             // Create a buffered image using the default color model             int type = BufferedImage.TYPE_INT_RGB;             if (hasAlpha) {                 type = BufferedImage.TYPE_INT_ARGB;             }             bimage = new BufferedImage(image.getWidth(null), image.getHeight(null), type);         }              // Copy image to buffered image         Graphics g = bimage.createGraphics();              // Paint the image onto the buffered image         g.drawImage(image, 0, 0, null);         g.dispose();              return bimage;     } }