我将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返回数据库?
答案 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
方法。