Java 如何将图像图标变回水滴?

Java 如何将图像图标变回水滴?,java,image,blob,Java,Image,Blob,我在数据库中存储了一个Blob(PNG文件),如下所示: File file = new File( "image.png" ); FileInputStream fis = new FileInputStream( file ); statement.setBinaryStream( 1, fis, (int) file.length() ); 目前,我使用此过程从DB获取Blob图像,并将其转换回图像以供使用: Blob blob = results.getBlob( 1 ); Image

我在数据库中存储了一个Blob(PNG文件),如下所示:

File file = new File( "image.png" );
FileInputStream fis = new FileInputStream( file );
statement.setBinaryStream( 1, fis, (int) file.length() );
目前,我使用此过程从DB获取Blob图像,并将其转换回图像以供使用:

Blob blob = results.getBlob( 1 );
ImageIcon imageIcon = new ImageIcon( blob.getBytes( 1L, (int) blob.length() ) );
但是,我需要一种方法将图像从ImageIcon放回数据库(修改后),而不创建文件,将其存储到磁盘,然后使用FileInputSteam将其读回

为清晰起见编辑
好吧,假设我把图像作为图像图标存储在标签中。我知道如何将其放入数据库的唯一方法是从FileInputStream读取,但这将涉及无意义地生成图像文件。那么,我如何将ImageIcon中的图像作为二进制流或Blob读回数据库呢

我想试试这样的东西

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();

您可能需要对其进行适当调整,并指定正确的w和h

在Blob API中:

setBinaryStream(long pos)
返回一个
OutputStream

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


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

您能澄清一下吗?您是否无法使用java对象“文件”,或者不希望在磁盘上创建另一个文件?更改文件名时是否正在更改文件名?您是说不能使用文件和FileInputStream存储然后读取文件,还是说不能使用文件存储它,但需要使用FileInputStream将其读回?坦率地说,你的问题是什么?