Как сохранить байтовый массив в виде файла изображения на диске? - PullRequest
11 голосов
/ 26 января 2010

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

Я уже сделал это

OutputStream out = new FileOutputStream("a.jpg");
out.write(byteArray);
out.flush();
out.close();

Но когда я открываю изображение, дважды щелкнув по нему, оно не показывает изображение.

Ответы [ 3 ]

8 голосов
/ 26 января 2010

Кроме отказа от использования блока try / finally (по крайней мере, в коде, который вы показали), это должно быть хорошо. (Кстати, вам не нужно очищать выходной поток, если вы его закрываете.)

Поскольку это не работает, это предполагает, что byteArray не на самом деле содержит изображение в кодировке JPEG. Как вы создали byteArray для начала? Если это «сырое» представление, вы, вероятно, захотите закодировать его, например, используя пакет javax.imageio .

8 голосов
/ 26 января 2010

Вы можете использовать FileOutputStream класс:

FileOutputStream fos = new FileOutputStream("image.jpg");
try {
    fos.write(someByteArray);
}
finally {
    fos.close();
}
3 голосов
/ 26 января 2010

Вы можете использовать ImageIO API .

Детали могут быть немного сложными, но сначала вы, вероятно, захотите создать BufferedImage, используя тип TYPE_BYTE_INDEXED и некоторый подходящий экземпляр IndexColorModel. Затем поместите туда свой байтовый массив. Подсказка: вы можете получить внутреннее представление BufferedImage с помощью:

myDataBuffer = myBufferedImage.getRaster().getDataBuffer();

Который, скорее всего, вернет буфер данных типа DataBufferByte (check!), Из которого вы получите байтовый массив с

myByteArray = ((DataBufferByte) myDataBuffer).getData();

Затем вы можете использовать System.arraycopy, чтобы скопировать в него свой байтовый массив.

...