我正在读取一个图像字节数组,现在图像是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位图像设置它。这是正确的方法吗? 谢谢, 盖
答案 0 :(得分:1)
createInterleavedRaster
方法将用于创建具有样本模型的图像,其中每个数据元素包含单个波段(即红色,绿色或蓝色)的颜色信息。如果您想要一个图像,其中每个16位数据元素包含所有3个色带,您想要使用 createPackedRaster
方法之一。
这些模型支持的唯一16位数据类型是unsigned short,因此您需要传递DataBufferUShort
实例。
我目前无法访问编译器为您编制一个工作代码示例,但SinglePixelPackedSampleModel API文档将帮助解释一下scanlineStride和band mask参数。如果需要,我将在稍后更新此回复并提供更多详细信息。