在java中将java.awt.Image保存到磁盘

时间:2016-05-18 11:07:18

标签: java

我已经从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 个答案:

答案 0 :(得分:4)

首先

  

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

     

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

     

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

     

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

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

二。您无法保存ToolKitImage whith ImageIO::write,因为它期望RenderedImage实例。ToolkitImage未实现此接口。

所以你有两个选择。

使用ImageIO

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

或者在ToolkitImage

上绘制RenderedImage
    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"));