[0...255]
简单地解释为从黑色(0)到白色(255)的颜色。
编辑: 对于16位灰度图像,我不会使用BMP格式。从技术上讲,您可以使用每像素16位的BMP格式来编码16位灰度数据(http://en.wikipedia.org/wiki/BMP_file_format#Pixel_format)。然而,在实践中,这是一个糟糕的想法(读作:hacky),因为该深度被设计用于编码像素的α、红、绿和蓝样本。你说得对,BMP只知道颜色。解决方法是创建一个256个条目的调色板,每个条目的R,G,B值都相同:第一个条目(0,0,0),第二个条目(1,1,1)等等。现在使用调色板将图像设为每像素8位。
编辑:鉴于您对16位灰度的新要求,我认为您有两个选择:转换为8位或使用不同于BMP的其他格式。如果您将其转换为8位,可以使用抖动使结果与您的源16位图像在视觉上无法区分。
BITMAPV4HEADER
的BMP并将bV4RedMask
、bV4GreenMask
和bV4BlueMask
设置为相同值来创建灰度BMP(每像素8位)。但是,这种格式的最小bcBitCount
值为16,因此每个像素仍然需要占用两个字节。您可以使用第二个字节作为alpha通道(透明度)。bcBitCount=16
和bV4…Mask=0xFFFF
),图像编辑器和库也会丢弃额外的位。
某些文件提到了64-BPP BMP文件,然而不清楚如何与BITMAPV4HEADER
字段匹配,因为遮罩字段都是32位大小的(因此无法为64 BPP指定通道遮罩)。
另一个选择是使用PNG,但它会压缩数据(这不是我想要的),在这里讨论过。
如果您不想压缩PNG文件,可以使用压缩级别0将像素放置在原样(加上zlib头/尾)。
还要注意,由于大多数显示器支持256种颜色而不是16位的4096种颜色,因此图像可能会出现扭曲。
16位深度将允许每个通道具有65536个不同的亮度值,而不是4096。扭曲听起来是伽马曲线的问题,与文件格式问题并没有真正的关系。