2011-04-18 143 views
3

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

我已经试过类似:


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

createInterleavedRaster方法将被用于创建与其中每个数据元素包含单个带颜色信息的示例模型的图像(即红色,绿色,或蓝色)。如果您想要一个图像,其中每个16位数据元素都包含所有3个色带,则您需要改为使用其中一种方法。

这些模型支持的唯一十六位数据类型是无符号短整型,所以您需要传递一个DataBufferUShort实例。

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