繁体   English   中英

JAVA:如何从byte []创建.PNG图像?

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

我见过一些代码源,但我不明白......

我使用Java 7

请问如何将RGB (红色,绿色,蓝色) 字节数组 (或类似的东西) 转换为.PNG文件格式

可以表示“RGB像素”的数组示例:

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

重要方面:

我尝试仅从字节[]“ 而不是从以前的现有文件”生成.PNG文件

是否可以使用现有的API? ;)

这是我的第一个代码:

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

.... 错误:找不到合适的方法

这里从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")); 

....多个错误: image == null! ......当然可以? 注意:我不搜索使用源文件

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

这假设字节数组每个像素有三个字节(红色,绿色然后是蓝色),值范围是0-255。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM