16位(565)图像读取

时间:2011-04-18 13:45:57

标签: java image graphics bufferedimage raster

我正在读取一个图像字节数组,现在图像是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位图像设置它。这是正确的方法吗? 谢谢, 盖

1 个答案:

答案 0 :(得分:1)

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

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

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