Как я могу превратить ImageIcon обратно в BLOB-объект? - PullRequest
2 голосов
/ 07 июня 2011

Я сохранил 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.

отредактируйте для ясности Хорошо, скажем, у меня есть это изображение, хранящееся в Label как ImageIcon.Единственный способ, которым я знаю, как поместить это в базу данных, это прочитать из FileInputStream, но это будет включать в себя бессмысленное создание файла изображения.Итак, как мне прочитать Image из ImageIcon обратно как BinaryStream или Blob обратно в базу данных?

Ответы [ 2 ]

1 голос
/ 07 июня 2011

Я бы попробовал что-то вроде этого

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.

0 голосов
/ 07 июня 2011

В Blob API:

setBinaryStream(long pos) возвращает OutputStream

"Извлекает поток, который можно использовать для записи в значение BLOB, которое представляет этот объект Blob." Таким образом, вы можете записать свои биты прямо в этот поток.

Я не совсем уверен, как получить пиксели от вашего модифицированного ImageIcon. Если вы можете привести его к BufferedImage, у этого класса есть метод getRGB.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...