【问题标题】:Save java.awt.Image to disk将 java.awt.Image 保存到磁盘
【发布时间】:2012-11-02 00:23:35
【问题描述】:

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

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

【问题讨论】:

    标签: java h.264 decoder


    【解决方案1】:

    请查看本教程:Writing/Saving an Image

    这是一项基本任务,ImageIO 库将帮助您轻松完成此任务。

    【讨论】:

    • 没有链接,请只回答。
    【解决方案2】:

    ImageIO

    类型可以是“jpg”、“png”(Java

    要保存 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"));
    

    【讨论】:

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

    类似的东西;

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

    【讨论】:

    • 它在运行时产生了 ClassCastException,这里不允许向下转换:java.lang.ClassCastException: sun.awt.image.ToolkitImage 不能转换为 java.awt.image.BufferedImage
    • 是的,我认为演员阵容可能有点有趣,您必须像其他人所说的那样通过ToolkitImage 进行转换,或者将Image 绘制为Graphics 对象以便产生一个BufferedImage
    • 显然,这就是我测试的结果,感谢 Alex B,它成功了,也谢谢你 :)
    【解决方案4】:
    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(); 
        } 
    }
    

    【讨论】:

    • 这个答案被低估但很棒!
    猜你喜欢
    • 2016-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-17
    • 2011-04-14
    • 1970-01-01
    • 2016-07-22
    • 2013-12-19
    相关资源
    最近更新 更多