title: How to convert a byte[] to a BufferedImage in Java?
body: <p>I'm posting this thread because I have some difficulties to deal with pictures in Java. I would like to be able to convert a picture into a byte[] array, and then to be able to do the reverse operation, so I can change the RGB of each pixel, then make a new picture. I want to use this solution because setRGB() and getRGB() of BufferedImage may be too slow for huge pictures (correct me if I'm wrong).</p>
  
  <p>I read some posts here to obtain a byte[] array (<a href="https://stackoverflow.com/a/9470843">such as here</a>) so that each pixel is represented by 3 or 4 cells of the array containing the red, the green and the blue values (with the additional alpha value, when there are 4 cells), which is quite useful and easy to use for me. Here's the code I use to obtain this array (stored in a PixelArray class I've created) :</p>
  
  <pre><code>public PixelArray(BufferedImage image)
  {
      width = image.getWidth();
      height = image.getHeight();
      DataBuffer toArray = image.getRaster().getDataBuffer();
      array = ((DataBufferByte) toArray).getData();
      hasAlphaChannel = image.getAlphaRaster() != null;
  }
  </code></pre>
  
  <p>My big trouble is that I haven't found any efficient method to convert this byte[] array to a new image, if I wanted to transform the picture (for example, remove the blue/green values and only keeping the red one). I tried those solutions :</p>
  
  <p>1) Making a DataBuffer object, then make a SampleModel, to finally create a WritableRaster and then BufferedImage (with additional ColorModel and Hashtable objects). It didn't work because I apparently don't have all the information I need (I have no idea what's the Hashtable for BufferedImage() constructor).</p>
  
  <p>2) Using a ByteArrayInputStream. This didn't work because the byte[] array expected with ByteArrayInputStream has nothing to do with mine : it represents each byte of the file, and not each component of each pixel (with 3-4 bytes for each pixel)...</p>
  
  <p>Could someone help me?</p>