2007.11.24 17:33

Java Object Converting :: Image to BufferedImage

import java.awt.Graphics2D;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.image.BufferedImage;
import java.awt.image.VolatileImage;
import javax.swing.ImageIcon;

public class BufferedImageConverter {
	public static BufferedImage toBufferedImage(Image input) {
		if(input instanceof BufferedImage)
			return (BufferedImage)input;
		if(input instanceof VolatileImage)
			return ((VolatileImage)input).getSnapshot();
		
		//too lazy to use MediaTracker directly:
		ImageIcon imageIcon = new ImageIcon(input);
		if(imageIcon.getImageLoadStatus() != MediaTracker.COMPLETE)
			throw new IllegalArgumentException("Can't load image");
		
		input = imageIcon.getImage();
		int w = input.getWidth(null);
		int h = input.getHeight(null);
		
		GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
		GraphicsDevice gd = ge.getDefaultScreenDevice();
		GraphicsConfiguration gc = gd.getDefaultConfiguration();
		BufferedImage output = gc.createCompatibleImage(w, h);
		
		//What about transparency? This code assumes it's OPAQUE,
		//but you can interrogate the image's source for its ColorModel
		Graphics2D g = output.createGraphics();
		g.drawImage(input, 0, 0, null);
		g.dispose();
		return output;
	}
}

Trackback 0 Comment 0