JAVA: Come creare.Immagine PNG da un byte []?


Ho visto qualche codice sorgente, ma non capisco...

Io uso Java 7

Per favore, come convertire un RGB (Rosso,verde,blu) Array di byte (o qualcosa di simile) in un .Formato file PNG?

Esempio da un array che potrebbe rappresentare "un pixel RGB":

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

Aspetto importante:

Cerco di generare un .File PNG solo da un byte [] " non da un file esistente precedente "

È possibile con un API esistente? ;)

Qui il mio primo codice:

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

.... Errore: Nessun metodo adatto trovato

Qui l'altra versione modificata da Jeremy ma sembra simile:

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")); 

....errori multipli : immagine == null! ...... Sicuro ? Nota: non cerco per utilizzare un file sorgente

Author: MadMonkey, 2014-03-13

1 answers

L'API I/O dell'immagine si occupa di immagini, quindi è necessario creare un'immagine dal proprio array di byte prima di scriverla.

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"));

Ciò presuppone che l'array di byte abbia tre byte per pixel (rosso, verde e blu) e che l'intervallo di valori sia 0-255.

 10
Author: prunge, 2014-03-13 04:30:02