使用字节数组设置栅格数据
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 将字节数组复制到图像中所做的是最快和最安全的方法。我做了完全相同的事情,而且效果很好。
因此,如果结果不是你所期望的,那么只有两种可能:
- 您复制到 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 只是为您管理 en 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 将字节数组复制到图像中所做的是最快和最安全的方法。我做了完全相同的事情,而且效果很好。
因此,如果结果不是你所期望的,那么只有两种可能:
- 您复制到 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 只是为您管理 en BufferedImage 编码。所以我确实认为你在其他地方有问题(见我引用的两点)。