2013-04-18 3 views
0

После прохождения многих похожих вопросов я не имел никакого способа, но задал свой собственный вопрос.Как создать BufferedImage из растровых данных

Мне нужно отобразить изображение на качающемся приложении. Источником изображения являются данные растровых изображений, которые извлекаются с сервера MS SQL. Я пробовал следующие способы:

TRY 1 - Я попытался создать ImageIcon из полученных байтов. Нет результатов.

TRY 2 - Сохраненные байты в файле .png и попытались загрузить с помощью ImageIO. Это отлично работает на моей локальной машине, но не работает на тестовом сервере. Оба являются машинами для Windows.

TRY3 - На шаге 2 я попытался сохранить в разных форматах, чем .png. Это не работает вообще.

Пожалуйста, дайте мне знать, что мне не хватает?

ПРИМЕЧАНИЕ. Я также попытался включить jai jars в ссылочные библиотеки.

+0

Я решил проблему с помощью Durandal. Мне нужно было создать изображение напрямую с помощью JAI, так как у меня нет прав на установку JAI в целевой системе. 'PlanarImage planar = JAI.create («поток», SeekableStream.wrapInputStream (inputStream, true)); это путь. Затем используйте «planar.getAsBuffredImage()» для отображения. –

ответ

0

Необходимо сохранить подсказку, какой формат данных имеет в базе данных. Если нет, вы можете только надеяться, что ImageIO может справиться с этим.

Нет необходимости записывать данные в файлы (что само по себе является ошибкой, где вы бы их записали? Подумайте о ограниченных привилегиях процесса и дисковых квотах). Просто создайте InputStream, который напрямую обращается к данным (например, java.io.ByteArrayInputStream), таким образом вы можете напрямую загружать ImageIO, используя методы, основанные на потоке.

+0

Спасибо за ваш ответ. Изображение сохраняется в виде _image_ в базе данных. Если вы посмотрите на данные, это будет большое шестнадцатеричное целое число. Я читаю данные как байты. Есть ли другой способ попробовать? Я пробовал так, как вы упомянули. Все еще никаких результатов. Может быть, я ошибаюсь при чтении данных из базы данных (!?) –

+0

Диалог типа «ИЗОБРАЖЕНИЕ» в MS-SQLServer не имеет ничего общего с графическими изображениями. Изображение представляет собой тип blob для двоичных файлов, он может содержать любые двоичные данные. Если ImageIO не может обрабатывать все изображения, вы можете смотреть только вручную на те, которые выходят из строя, и проверить четыре байта fisrt - те, которые содержат обычно какое-то магическое число, которое позволяет угадать формат файла (http: // www. У astro.keele.ac.uk/oldusers/rno/Computing/File_magic.html есть короткий список распространенных магических чисел). Я подозреваю, что некоторые из ваших файлов не являются изображениями вообще, или его необычный формат, не поддерживаемый ImageIO. – Durandal

+0

Я проверил в ссылке, которую вы предоставили, и это маленький формат TIFF. И да, этот столбец изображения всегда будет иметь данные изображения. Все данные изображения начинаются с '49492a00'. Я вижу, что формат tiff по умолчанию не поддерживается ImageIP API. В качестве дополнительной информации в большинстве случаев у меня есть данные изображения в виде файлов, но я тоже не могу прочитать эти изображения, даже после включения JAI в мою библиотеку. –