我有一个关于BufferedImage中的栅格的问题。我有一个图像数据字节数组,我想将该字节数据设置为新的图像数据。我已经看到了执行此操作的方法,如下图所示:
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:旁注,有人知道为什么字节看起来像在输出图像中那样重复吗?分离出高位和低位的代码似乎没有什么重复。
最佳答案
将字节数组复制到具有DataBufferByte的图像中所做的操作是最快,最安全的方法。我做同样的事情,并且效果很好。
因此,如果结果不是您期望的,则只有两种可能性:
您复制到DataBuffer中的数据不是您想要的东西
写入图像时出现问题。
如果要使用栅格而不是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只是为您管理BufferedImage编码。因此,我确实认为您在其他地方有问题(请参阅我引用的两点)。