Here you can find the source of toBufferedImage(Image image)
Returns a buffered image with the contents of an image Adapted from: http://www.exampledepot.com/egs/java.awt.image/HasAlpha.html
Parameter | Description |
---|---|
image | a parameter |
public static BufferedImage toBufferedImage(Image image)
//package com.java2s; /*/*w ww . ja v a 2 s . c o m*/ * Copyright (C) 2010-2011 Pedro J Rivera * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. 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; public class Main { /** * Returns a buffered image with the contents of an image * * Adapted from: http://www.exampledepot.com/egs/java.awt.image/HasAlpha.html * * @param image * @return */ 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 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; } /** * Returns true if the specified image has transparent pixels * * Adapted from: http://www.exampledepot.com/egs/java.awt.image/Image2Buf.html * * @param image * @return */ 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(); } }