我有一个关于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编码。因此,我确实认为您在其他地方有问题(请参阅我引用的两点)。

10-06 14:06
查看更多