如何将ImageIcon转换回blob?

时间:2011-06-06 21:29:04

标签: java image blob

我将Blob(PNG文件)存储到数据库中,如下所示:

File file = new File( "image.png" );
FileInputStream fis = new FileInputStream( file );
statement.setBinaryStream( 1, fis, (int) file.length() );

目前,我使用此过程从数据库中获取Blob图像并将其转换回图像以供使用:

Blob blob = results.getBlob( 1 );
ImageIcon imageIcon = new ImageIcon( blob.getBytes( 1L, (int) blob.length() ) );

但是,我需要一种方法将图像从ImageIcon放回数据库(在我更改之后)而不创建文件,将其存储到磁盘然后用FileInputSteam读回来。

为清晰起见,

编辑 好吧,说我把那个图像作为ImageIcon存储在Label中。我知道如何将其放入数据库的唯一方法是从FileInputStream中读取,但这将无意义地制作图像文件。那么我如何从ImageIcon中读取Image作为BinaryStream或Blob返回数据库?

2 个答案:

答案 0 :(得分:1)

我会尝试这样的事情

PixelGrabber pg = new PixelGrabber(imageIcon.getImage(),0,0, w,h,true);
pg.grabPixels();
// You may need to wait here until all pixels are copied (see ImageObserver)
Object buffer = pg.getPixels();

请参阅http://download.oracle.com/javase/1.4.2/docs/api/java/awt/image/PixelGrabber.html

您可能需要适当调整它并指定正确的w和h。

答案 1 :(得分:0)

在Blob API中:

setBinaryStream(long pos)会返回OutputStream

“检索可用于写入此Blob对象表示的BLOB值的流。”所以你可以将你的位直接写入该流。

我不太确定如何从修改后的ImageIcon中获取像素。如果您可以将其转换为BufferedImage,则该类具有getRGB方法。