如何在Java SE中将字节数组转换为Image

Ma9*_*9uS 5 java graphics image

在Java SE中将原始字节数组转换为Image的正确方法是什么.数组由字节组成,其中每三个字节代表一个像素,每个字节代表相应的RGB组件.

任何人都可以建议代码示例吗?

谢谢,迈克

Ale*_*kin 9

你可以使用Raster类来完成它.它更好,因为它不需要迭代和复制字节数组.

 byte[] raw = new byte[width*height*3]; // raw bytes of our image
 DataBuffer buffer = new DataBufferByte(raw, raw.length);

 //The most difficult part of awt api for me to learn
 SampleModel sampleModel = new ComponentSampleModel(DataBuffer.TYPE_BYTE, width, height, 3, width*3, new int[]{2,1,0});

 Raster raster = Raster.createRaster(sampleModel, buffer, null);

 BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR);
 image.setData(raster);
Run Code Online (Sandbox Code Playgroud)


Cod*_*Tao 6

假设你知道图像的高度和宽度.

BufferedImage img=new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
for(int r=0; r<height; r++)
for(int c=0; c<width; c++)
{
  int index=r*width+c;
  int red=colors[index] & 0xFF;
  int green=colors[index+1] & 0xFF;
  int blue=colors[index+2] & 0xFF;
  int rgb = (red << 16) | (green << 8) | blue;
  img.setRGB(c, r, rgb);
}
Run Code Online (Sandbox Code Playgroud)

大致.这假设像素数据被编码为一组行; 并且颜色的长度是3*宽*高(应该是有效的).