I have seen some code source, but I do not understand...
我见过一些代码源,但我不明白......
I use Java 7
我使用Java 7
Please, how to convert a RGB (Red,Green,Blue) Byte Array (or something similar) to a .PNG file format ?
请问如何将RGB(红色,绿色,蓝色)字节数组(或类似的东西)转换为.PNG文件格式?
Example from an array that could represent "a RGB pixel" :
可以表示“RGB像素”的数组示例:
byte[] aByteArray={0xa,0x2,0xf};
Important Aspect :
重要方面:
I try to generate a .PNG file only from a byte[] "not from a previous existing file"
我尝试仅从字节[]“生成.PNG文件”而不是从以前的现有文件生成
is it possible with an existing API? ;)
是否可以使用现有的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 :
这里从Jeremy修改的其他版本看起来类似:
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
....多个错误:image == null! ......当然可以?注意:我不搜索使用源文件
1 个解决方案
#1
10
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.
Image I / O 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"));
This assumes the byte array has three bytes per pixel (red, green then blue) and the range of values is 0-255.
这假设字节数组每个像素有三个字节(红色,绿色然后是蓝色),值范围是0-255。
#1
10
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.
Image I / O 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"));
This assumes the byte array has three bytes per pixel (red, green then blue) and the range of values is 0-255.
这假设字节数组每个像素有三个字节(红色,绿色然后是蓝色),值范围是0-255。