3

我正在读取一个图像字节数组,现在图像是 16 位(r:5,g:6,b:5),我想将它读取到 BufferedImage。

我试过类似的东西:


int[] nBits = {5, 6, 5};
int[] bOffs = {0, 0, 0};
ColorModel colorModel = new ComponentColorModel(
        cs, nBits, false, false,
        Transparency.OPAQUE,
        DataBuffer.TYPE_BYTE);
WritableRaster raster = Raster.createInterleavedRaster(
        new DataBufferByte(screenBuffer,screenBuffer.length),
        foundWidth, foundHight,
        foundWidth * 2, 2,bOffs, null);

BufferedImage imgReconstructed = new BufferedImage(
        colorModel,raster,false,null);


我的问题是 bandOffsets,我应该如何将它设置为 16 位图像。这是正确的方法吗?谢了,兄弟们

4

1 回答 1

1

createInterleavedRaster方法将用于创建具有样本模型的图像,其中每个数据元素包含单个波段(即红色、绿色或蓝色)的颜色信息。如果您想要一个每个 16 位数据元素包含所有 3 个色带的图像,您想使用其中一种createPackedRaster方法。

这些模型唯一支持的 16 位数据类型是 unsigned short,因此您需要传递一个DataBufferUShort实例。

我目前无法访问编译器来为您整理工作代码示例,但SinglePixelPackedSampleModel API 文档将有助于解释 scanlineStride 和 band mask 参数。如果需要,我稍后会更新此回复并提供更多详细信息。

于 2011-04-18T17:26:33.180 回答