使用字节数组设置栅格数据

Set Raster Data with Byte Array

我对 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 时,最终结果并不是预期的那样。几天来我一直在为这个项目苦思冥想,我想看看我是否可以将字节数据直接放入栅格中,看看这是否有所作为。如果这个问题有点令人困惑,我很抱歉,我的大脑因编码时间而有点焦躁。如果有什么方法可以让我更清楚,请告诉我。

谢谢!

编辑:输出图像 clilck

EDIT2:旁注,有谁知道为什么字节在输出图像中看起来像那样重复?分隔高位和低位的代码似乎没有重复任何内容。

您使用 DataBufferByte 将字节数组复制到图像中所做的是最快和最安全的方法。我做了完全相同的事情,而且效果很好。

因此,如果结果不是你所期望的,那么只有两种可能:

  1. 您复制到 DataBuffer 中的数据并不是您想要的那样
  2. 写入图像时出现问题。

如果你想使用栅格而不是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 编码。所以我确实认为你在其他地方有问题(见我引用的两点)。