Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 灰度图像的BMP格式是什么?_Image_Bitmap_File Format - Fatal编程技术网

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

Image 灰度图像的BMP格式是什么?,image,bitmap,file-format,Image,Bitmap,File Format,灰度图像的BMP格式是什么(特别是16位/像素)? 本文仅讨论bmp的彩色图像 更新: 只是为了更新和信息,为未来的访客,我要为这是未压缩的,可以支持16位灰度。另一个选择是使用,但它会压缩数据(这不是我想要的)。 还请注意,图像可能会出现失真,因为大多数显示器支持256色,而不是4096色的16位显示器。因此图像将被饱和 但令人惊讶的是,BMP在16位图像灰度的情况下几乎无能为力。 感谢帮助我理解这个问题的人 对于灰度图像,我会使用8位BMP。8位BMP可以使用调色板对颜色进行编码。但是,如果

灰度图像的BMP格式是什么(特别是16位/像素)? 本文仅讨论bmp的彩色图像

更新:

只是为了更新和信息,为未来的访客,我要为这是未压缩的,可以支持16位灰度。另一个选择是使用,但它会压缩数据(这不是我想要的)。 还请注意,图像可能会出现失真,因为大多数显示器支持256色,而不是4096色的16位显示器。因此图像将被饱和

但令人惊讶的是,BMP在16位图像灰度的情况下几乎无能为力。

感谢帮助我理解这个问题的人

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

编辑:我不会对16位灰度图像使用BMP。从技术上讲,您可以使用16位/像素BMP格式来编码16位灰度数据()。然而,在实践中,这是一个坏主意(读:hacky),因为深度设计用于对像素的alpha、红色、绿色和蓝色样本进行编码

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


还要问你自己,你真的,真的需要这种额外的精确度吗?对于大多数应用程序,每像素8位就可以了(=如果您对精度没有任何具体要求,那么就是这样)。

没错,BMP只知道颜色。方法是创建一个包含256个条目的调色板,其中每个条目的R、G、B值相同:第一个条目(0,0,0)、第二个条目(1,1,1)等。现在使用调色板使图像每像素8位


编辑:考虑到您对16位灰度的新要求,我认为您有两种选择:转换为8位,或使用BMP以外的其他格式。

看起来,TIFF和PNG本机支持16位灰度

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

灰度图像的BMP格式是什么

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

特别是对于每像素16位

它看起来不像任何BMP版本支持16位颜色深度。即使文件格式似乎允许它(
bcBitCount=16
bV4…Mask=0xFFFF
),图像编辑器和库也会丢弃额外的位

请参阅64-BPP BMP文件,但不清楚该文件如何与
BITMAPV4HEADER
字段相匹配,因为掩码字段的大小均为32位(因此无法为64-BPP指定通道掩码)

另一个选择是使用PNG,但它压缩数据(这不是我想要的),正如这里所讨论的

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

还请注意,图像可能会出现失真,因为大多数显示器支持256色,而不是4096色的16位显示器


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

如果你想要16位灰度,你需要使用不同的格式-我建议使用PNG。它的压缩损失小吗?是的,PNG是无损的-它使用zlib进行压缩:好吧,这篇文章现在已经7年了,但是PNG压缩是无损的,并且使用zlib。zlib可以指定为使用压缩级别0,这意味着根本没有压缩。所以你可能有未压缩的PNG。这对他的16位灰度图像没有帮助。完全同意你的BMP评估,因为这不仅需要一个自定义文件编写器,还需要一个自定义文件读取器。一个标准的BMP阅读器会将他试图实现的灰度解释为其他颜色,并且输出会(至少可以说)有趣+1@trumpetlicks,这个问题在写的时候没有提到16位。抱歉,我没有注意到这是一个更新:-)除此之外,回答得好!