[英]Save java.awt.Image to disk in 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)
如何删除此错误? 任何建议都有很大帮助。
第一
Oracle JDBC驱动程序支持在服务器和客户端之间以任一方向操纵数据流。 驱动程序支持所有流转换:二进制,ASCII和Unicode。 以下是每种类型的流的简要说明:
二进制。 用于RAW字节数据,对应于getBinaryStream方法
ASCII。 用于ISO-Latin-1编码中的ASCII字节,对应于getAsciiStream方法
Unicode格式。 用于UTF-16编码的Unicode字节,对应于getUnicodeStream方法
所以你可能需要使用clob.getBinaryStream
来检索你的流。
第二。 你不能将ToolKitImage
保存ToolKitImage
ImageIO :: 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"));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.