【问题标题】:Save java.awt.Image to disk in java在 java 中将 java.awt.Image 保存到磁盘
【发布时间】:2016-09-14 19:58:42
【问题描述】:

我已经从 oracle 程序中读取了 clob,并通过以下代码将它们转换为 java.awt.Image 对象。

InputStream stream = clob.getAsciiStream();
                ByteArrayOutputStream output = new ByteArrayOutputStream();
                int a1 = stream.read();
                while (a1 >= 0) {
                  output.write((char) a1);
                  a1 = stream.read();
                }
                Image myImage = Toolkit.getDefaultToolkit().createImage(output.toByteArray());
                output.close();

现在,我想将 myImage 保存到硬盘。那么,我该怎么做才能将这些 java.awt.Image 保存到文件中?

我的尝试:

我已将 myImage 转换为 BufferedImage,然后通过以下代码将其写入 ImageIo:

BufferedImage bi = (BufferedImage)myImage;
               ImageIO.write(bi, "jpg",new File("E:\\out.jpg"));

但我得到以下异常:

Got Exception as : sun.awt.image.ToolkitImage cannot be cast to java.awt.image.BufferedImage
java.lang.ClassCastException: sun.awt.image.ToolkitImage cannot be cast to java.awt.image.BufferedImage
    at com.connect.home.Home.getHomeParameter(Home.java:103)
    at com.connect.home.Home.main(Home.java:141)

如何消除此错误?任何建议都有很大帮助。

【问题讨论】:

  • 得到异常:宽度 (-1) 和高度 (-1) 不能
  • 使用 ImageIO.write 方法。
  • 我应该在哪里使用 ImageIO.write 方法?
  • @AlexanderOrlov “但是它不可能(总是)将它转换为其他类”你不需要“总是”在这里,因为你永远不能这样做投掷。仅转换为同一类或父类。 TookitImageBufferedImage 是兄弟(同一个父类),这个演员表不起作用。

标签: java


【解决方案1】:

第一个

Oracle JDBC 驱动程序支持以任一方式操作数据流 服务器和客户端之间的方向。驱动程序支持所有流 转换:二进制、ASCII 和 Unicode。以下是简述 每种流的描述:

二进制。用于RAW字节数据,对应getBinaryStream方法

ASCII。用于ISO-Latin-1编码的ASCII字节,对应getAsciiStream方法

统一码。用于UTF-16编码的Unicode字节,对应getUnicodeStream方法

因此,您可能需要使用clob.getBinaryStream 来检索您的流。

第二。你不能保存ToolKitImageImageIO::write 因为它需要一个RenderedImage 实例。而ToolkitImage 没有实现这个接口。

所以你有两个选择。

使用ImageIO读取流

    RenderedImage image = ImageIO.read(clob.getBinaryStream());
    ImageIO.write(image, "JPG",new File("E:\\out.jpg"));

或在RenderedImage 上绘制ToolkitImage

    BufferedImage bi = new BufferedImage(myImage.getWidth(null), myImage.getHeight(null), BufferedImage.TYPE_INT_RGB);
    bi.getGraphics().drawImage(myImage,0,0, null);
    ImageIO.write(bi, "JPG", new File("E:\\out.jpg"));

【讨论】:

    猜你喜欢
    • 2012-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-21
    • 2013-01-17
    • 2011-04-14
    • 1970-01-01
    • 2016-07-22
    相关资源
    最近更新 更多