簡體   English   中英

在java中將java.awt.Image保存到磁盤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM