将java.awt.Image保存到磁盘

10

我有一个第三方库,可以从视频流中生成java.awt.Image对象。(实际上,它最初用于解码.h264文件,然后在JFrame中显示解码后的图像)。

现在,我想使用该库捕获流的几个图像并将它们保存到硬盘上。那么,我应该怎么做才能将这些java.awt.Image保存到文件中?

4个回答

7

请查看ImageIO

类型可以是“jpg”,“png”(Java <1.6)或“gif”(Java 1.6+)。

要保存ToolKitImage,您可以执行以下操作。

BufferedImage bufferedImage= new BufferedImage(toolkitImage.getWidth(), toolkitImage.getHeight(), BufferedImage.TYPE_INT_RGB);
image.getGraphics().drawImage(toolkitImage, 0, 0, null);
ImageIO.write(bufferedImage, "jpg", new File("C:\\myImage.jpg"));

1
它在运行时生成了ClassCastException,这里不允许向下转型:java.lang.ClassCastException:sun.awt.image.ToolkitImage无法转换为java.awt.image.BufferedImage。 - Hoa Nguyen
你说你有一个 java.awt.image 对象。ToolkitImage 和 BufferedImage 都继承自 Image。 - Felix
是的,它们都是从Image继承而来的。这意味着我们可以将ToolkitImage或BufferedImage向上转型为Image,反之亦然是可能的,但并不总是成立,至少在这种情况下是这样:我们必须从ToolkitImage向上转型为Image(被接受),然后从Image向下转型为BufferedImage(不被接受) :) - Hoa Nguyen
我更新了代码,首先从ToolKitImage创建一个BufferedImage,然后将其保存到文件中。请注意,我无法测试它(但我认为它应该可以工作)。 - Felix

6
public void savePic(Image image, String type, String dst){ 
    int width = image.getWidth(this); 
    int height = image.getHeight(this);
    BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_3BYTE_BGR);
    Graphics g = bi.getGraphics(); 
    try { 
        g.drawImage(image, 0, 0, null);
        ImageIO.write(bi, type, new File(dst)); 
    } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
    } 
}

这个答案被低估了,但是很棒! - Snackoverflow

2
请查看本教程:编写/保存图像 这是一个基本任务,使用ImageIO库可以轻松完成。

No link only answers please. - Adam Arold

-3

类似于:

Image img = /* your image */
BufferedImage bi = (BufferedImage)img;
File f = new File("./output.png");
ImageIO.write(bi, "png", f);

3
运行时引发了ClassCastException,这里不允许向下转型:java.lang.ClassCastException: sun.awt.image.ToolkitImage无法强制转换为java.awt.image.BufferedImage。 - Hoa Nguyen
是的,我认为那个转换可能有点奇怪,你必须通过ToolkitImage或者按照其他人所说的将Image绘制到Graphics对象中以产生BufferedImage - lynks
显然,这就是我在Alex B的帮助下测试过的,而且它有效了,也谢谢你 :) - Hoa Nguyen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接