JAVA: как создать.PNG изображение из байта[]?

Я видел некоторый источник кода, но я не понимаю...

Я использую Java 7

пожалуйста, как преобразовать RGB (Красный,Зеленый,Синий) Массив Байт (или что-то подобное) на .Файл формата PNG ?

пример из массива, который может представлять "пиксель RGB":

byte[] aByteArray={0xa,0x2,0xf};

Важный Аспект :

Я пытаюсь создать .PNG файл только из байта []"не от предыдущий существующий файл"

возможно ли это с помощью существующего API? ;)

вот мой первый код :

byte[] aByteArray={0xa,0x2,0xf}; 
ByteArrayInputStream bais = new ByteArrayInputStream(aByteArray); 
File outputfile = new File("image.png"); 
ImageIO.write(bais, "png", outputfile); 

....ошибка : не найден подходящий метод

здесь другая версия изменена из Джереми но похожи :

byte[] aByteArray={0xa,0x2,0xf};
ByteArrayInputStream bais = new ByteArrayInputStream(aByteArray); 
final BufferedImage bufferedImage = ImageIO.read(newByteArrayInputStream(aByteArray));
ImageIO.write(bufferedImage, "png", new File("image.png")); 

....несколько ошибки : image = = null! ...... Уверен ? Примечание : Я не ищу, чтобы использовать исходный файл

1 ответов


API ввода-вывода изображений имеет дело с изображениями, поэтому вам нужно сначала сделать изображение из вашего массива байтов, прежде чем записывать его.

byte[] aByteArray = {0xa,0x2,0xf,(byte)0xff,(byte)0xff,(byte)0xff};
int width = 1;
int height = 2;

DataBuffer buffer = new DataBufferByte(aByteArray, aByteArray.length);

//3 bytes per pixel: red, green, blue
WritableRaster raster = Raster.createInterleavedRaster(buffer, width, height, 3 * width, 3, new int[] {0, 1, 2}, (Point)null);
ColorModel cm = new ComponentColorModel(ColorModel.getRGBdefault().getColorSpace(), false, true, Transparency.OPAQUE, DataBuffer.TYPE_BYTE); 
BufferedImage image = new BufferedImage(cm, raster, true, null);

ImageIO.write(image, "png", new File("image.png"));

предполагается, что массив байтов имеет три байта на пиксель (красный, зеленый, затем синий), а диапазон значений-0-255.