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

标签 java arrays byte bufferedimage

我有关于 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 只是为您管理 BufferedImage 编码。所以我确实认为您在其他地方遇到了问题(请参阅我引用的两点)。

关于java - 使用字节数组设置栅格数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41249827/

相关文章:

php - 创建动态多维数组

streaming - 字节流和比特流的区别

java - 将包含字节的字符串导出到文件而不进行编码

java - Java 中的点长 - 找到它的定义

java - 返回不同类型的对象时,将访问者或监听器与 ANTLR4 一起使用

java - 什么原语用于实现 synchronized 关键字?

java - Java List<> 的问题

python - 如何从另一个数组的值中获取一个 numpy 数组 (Python)

c - 制作结构数组和整理单词时出现问题

java - java中不同字符集的字节长度是多少?