我对BufferedImage中的Rasters有疑问。我有一个图像数据的字节数组,我想将该字节数据设置为新的图像数据。我已经看到了这样做的方式,如下图所示:
BufferedImage bImageFromConvert = new BufferedImage(dimWidth, dimHeight, BufferedImage.TYPE_BYTE_GRAY);
byte[] bufferHolder = ((DataBufferByte) bImageFromConvert.getRaster().getDataBuffer()).getData();
System.arraycopy(imageInByte, 0, bufferHolder, 0, bufferHolder.length);//imageInByte is my byte array
ImageIO.write(bImageFromConvert, "bmp", new File(
directory + fileName + "_Compressed.bmp"));
但是,在将数据写入bmp时,最终结果并非预期。我已经在这个项目上坚持了好几天,我想看看我是否可以将字节数据直接放在Raster中,看看是否有所作为。对不起,如果这个问题有点令人困惑,那么从编码时间开始,我的脑子就会有点油腻。如果有任何方法可以让我更清楚,请告诉我。
谢谢!
编辑:输出图像 clilck
EDIT2:旁注,有人知道为什么字节似乎在输出图像中重复吗?分离出高位和低位的代码似乎并没有重复任何内容。
答案 0 :(得分:1)
使用DataBufferByte将字节数组复制到图像中所做的是最快速,最安全的方法。我做的完全相同,而且效果很好。
因此,如果结果不符合您的预期,那么只有两种可能性:
如果您想使用栅格而不是DataBuffer,您可以按照以下步骤操作。
for (int y=0, pos=0 ; y < dimHeight ; y++)
for (int x=0 ; x < dimWidth ; x++)
bImageFromConvert.getRaster().setSample(x, y, O, imageInByte[pos] & 0xFF) ;
但它必须与你之前所做的完全相同。 Raster只为您管理en BufferedImage编码。所以我认为你在其他地方有一个问题(参见我引用的两点)。