JAVA : How to create .PNG image from a byte[]?

20,447

The Image I/O API deals with images, so you need to make an image from your byte array first before you write it out.

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

This assumes the byte array has three bytes per pixel (red, green then blue) and the range of values is 0-255.

Share:
20,447
MadMonkey
Author by

MadMonkey

Updated on March 14, 2020

Comments

  • MadMonkey
    MadMonkey over 4 years

    I have seen some code source, but I do not understand...

    I use Java 7

    Please, how to convert a RGB (Red,Green,Blue) Byte Array (or something similar) to a .PNG file format ?

    Example from an array that could represent "a RGB pixel" :

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

    Important Aspect :

    I try to generate a .PNG file only from a byte[] "not from a previous existing file"

    is it possible with an existing API? ;)

    Here my first code :

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

    ....Error : No suitable Method Found

    Here the other version modified from Jeremy but look similar :

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

    ....multiple Errors : image == null! ...... Sure ? Note : I do not search to use a source file