日期:2014-05-20  浏览次数:20794 次

请教一个关于java.awt.Image与sun.awt.image.ToolkitImage,java.awt.image.BufferedImage的问题
最近要用java进行图像处理,其中用的创建图像的方法为:
Image bImg = Toolkit.getDefaultToolkit().createImage(new MemoryImageSource(500, 300, img.getColorModel(), bytePixels, 0, 500))接着想把创建的图像保存到本地文件系统,用到的方法:
ImageIO.write(bImg, "jpeg", new File("D:\\test.jpg"));
结果报错:sun.awt.image.ToolkitImage cannot be cast to java.awt.image.BufferedImage
经过调试,发现:
1.Toolkit.getDefaultToolkit()返回的是sun.awt.HeadlessToolkit的一个实例;
2.sun.awt.HeadlessToolkit的方法createImage(ImageProducer producer)返回的是一个sun.awt.image.ToolkitImage实例;
3.sun.awt.image.ToolkitImage是一个java.awt.Image的一个子类;
4.javax.imageio.ImageIO.write(RenderedImage im,String formatName,File output)方法需要的是一个java.awt.image.RenderedImage接口的实现类对象,例如:java.awt.image.BufferedImage是其一个实现类,并java.awt.image.RenderedImage与java.awt.Image也没有任何关系
因此会出现sun.awt.image.ToolkitImage cannot be cast to java.awt.image.BufferedImage

现在,我需要Toolkit.getDefaultToolkit().createImage(new MemoryImageSource(500, 300, img.getColorModel(), bytePixels, 0, 500))创建的Image对象保存到本地文件系统,应该怎么解决?
请各位高手指点,很急,不胜感激,多谢了


------解决方案--------------------
Java code
BufferedImage bi = new BufferedImage(...);
Graphic2D g2d = bi.createGraphics();
g2d.drawImage(Toolit.getDefa................);
ImageIO.write(bi,"png",new File(...));
g2d.dispose();