У меня есть представление массива байтов Изображения. Как сохранить его на диске как файл изображения.
Я уже сделал это
OutputStream out = new FileOutputStream("a.jpg");
out.write(byteArray);
out.flush();
out.close();
Но когда я открываю изображение путем двойного щелчка по нему, это не показывает изображения.
Файлы объектов содержат двоичные данные - единственным более высоким уровнем, который большинство компиляторов могут выводить, является ассемблером, поэтому, если вы не можете прочитать, что вы не повезете. Тем не менее, посмотрите на этот вопрос для получения дополнительной информации в этой области.
-121--1738654-, кроме неспособности использовать блок TRY /, наконец (по крайней мере, в указанном вами коде), который должен быть в порядке. (Вам не нужно промывать выходной поток, если вы закрываете его, кстати.)
Как не работает, что предлагает ByTearRay
На самом деле Содержать JPEG-кодируемое изображение. Как вы создали BYTEARRAY
, чтобы начать с? Если это «необработанное» представление, вы, вероятно, захотите его кодировать, например Используя пакет javax.imageio .
Вы могли бы использовать класс класса :
FileOutputStream fos = new FileOutputStream("image.jpg");
try {
fos.write(someByteArray);
}
finally {
fos.close();
}
Вы можете использовать API Imageio .
Детали могут быть немного волосатыми, но сначала вы, вероятно, захотите создать буферные данные с использованием типа Type_byte_indexed и некоторый подходящий экземпляр indexcolormodel. Затем поместите свой байтовый массив там. Подсказка: Вы можете получить внутреннее представление буферизации с помощью:
myDataBuffer = myBufferedImage.getRaster().getDataBuffer();
, которые, вероятно, вернут буфер данных типа DataufferByte (Check!), Из которого вы получаете байтовый массив с
myByteArray = ((DataBufferByte) myDataBuffer).getData();
, тогда вы можете использовать System.arrayCopy для копирования Ваш байтовый массив на это.