使用字节数组

时间:2016-12-20 19:26:22

标签: java arrays byte bufferedimage

我对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:旁注,有人知道为什么字节似乎在输出图像中重复吗?分离出高位和低位的代码似乎并没有重复任何内容。

1 个答案:

答案 0 :(得分:1)

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

因此,如果结果不符合您的预期,那么只有两种可能性:

  1. 您复制到DataBuffer的数据不是您的意思
  2. 编写图像时出现问题。
  3. 如果您想使用栅格而不是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编码。所以我认为你在其他地方有一个问题(参见我引用的两点)。