什么是灰度图像的BMP格式?

时间:2012-06-18 16:02:24

标签: image bitmap file-format

灰度图像的BMP格式是什么(特别是每像素16位)? wikipedia只讨论了bmp的彩色图像。

更新

只是为了更新和未来访问者的信息,我将PGM,因为它是未压缩的,可以支持16位灰度。另一种选择是使用PNG,但它会压缩数据(这不是我想要的),正如所讨论的那样here。  另请注意,图像可能会显得失真,因为大多数显示器支持256色而不支持4096(16位)。所以图像会饱和。

令人惊讶的是,在16位图像的灰度级情况下,BMP几乎几乎无助。
感谢帮助我理解这个问题的人。

4 个答案:

答案 0 :(得分:4)

对于灰度图像,我会使用8位BMP。 8位BMP可以使用调色板对颜色进行编码。但是,如果您不使用颜色值,则可以将颜色值[0...255]解释为从黑色(0)到白色(255)的颜色。

编辑:我不会将BMP用于16位灰度图像。从技术上讲,您可以使用16位/像素BMP格式来编码16位灰度数据(http://en.wikipedia.org/wiki/BMP_file_format#Pixel_format)。然而在实践中这是一个坏主意(阅读:hacky),因为该深度旨在编码像素的alpha,红色,绿色和蓝色样本。

用于存储每像素16位灰度数据的更好格式是PNG。

还要问问自己,你真的,真的需要超精确吗?对于大多数应用,每像素8位就好了(=如果你对精度没有任何特殊要求,那就是这种情况)。

答案 1 :(得分:2)

你是对的,BMP只知道颜色。这样做的方法是创建256个条目的调色板,其中每个条目对R,G,B具有相同的值:第一个条目(0,0,0),第二个条目(1,1,1)等。现在使用调色板使图像每像素8位。

编辑:鉴于您对16位灰度的新要求,我认为您有两种选择:转换为8位,或者使用不同于BMP的其他格式。

答案 2 :(得分:2)

如图所示,TIFF和PNG原生支持16位灰度。

http://en.wikipedia.org/wiki/Grayscale

我假设您想要保存的这些图像不仅仅是用于显示,而是用于需要额外精度的某种后期处理?如果没有,那么我建议删除最低有效8位,并存储带有颜色映射的更简单的8位位图,以将每个值映射到具有值的RGB - > (值,值,值)RGB映射。

答案 3 :(得分:0)

  

灰度图像的BMP格式是什么

除了使用调色板之外,还可以通过用BITMAPV4HEADER编写BMP来创建灰度BMP(每像素8位)。并将bV4RedMaskbV4GreenMaskbV4BlueMask设置为相同的值。但是,这种格式的最小bcBitCount值为16,因此每个像素仍需要占用两个字节。不过,您可以将第二个字节用于alpha通道(透明度)。

  

尤其是每个像素16位

看起来没有任何BMP版本支持16位色深。即使文件格式看似允许使用bcBitCount=16bV4…Mask=0xFFFF,图像编辑器和库也会丢弃多余的位。

Some documents指的是64-BPP BMP文件,但是尚不清楚它与BITMAPV4HEADER字段如何匹配,因为mask字段的大小均为32位(因此无法指定64 BPP的通道掩码)。

  

另一种选择是使用PNG,但是它会压缩数据(这不是我想要的),如此处所述。

如果您不想压缩PNG文件,则无需压缩。使用0压缩级别会将像素保持原样(加上zlib页眉/页脚)。

  

还请注意,由于大多数显示器支持256色而不是16位4096,所以图像可能看起来失真。

16位深度将允许65536个不同的每通道亮度值,而不是4096。失真听起来像是伽马曲线的问题,并且与文件格式问题无关。