【问题标题】:How can I check the color depth of a Bitmap?如何检查位图的颜色深度?
【发布时间】:2011-01-10 03:59:38
【问题描述】:

我正在开发一个打印图像文件文件夹的应用程序,包括 JPEG 和 TIFF。 TIFF 图像通常是黑白 (1bpp)。

加载图片后,我想确定图片是Color还是B&W还是Grayscale,以便将图片发送到正确的打印机(彩色打印机或黑白打印机)。

我正在使用Bitmap 构造函数image = new Bitmap(filename); 来加载图像。

编辑:检查像素深度的答案非常适合黑白。关于在不遍历每个像素的情况下检查图像是否为灰度的任何想法?

【问题讨论】:

  • 使用它的 PixelFormat 属性。

标签: c# image bitmap color-depth bit-depth


【解决方案1】:

只需检查此属性

image.PixelFormat

它将匹配 System.Drawing.Imaging.PixelFormat

中的值之一

虽然您希望向黑白打印机发送的不仅仅是黑白,您还应该在那里发送任何灰度。

【讨论】:

  • 疯了,我翻遍了 Bitmap 类的成员列表,不知道我是怎么漏掉的。
  • 我还没有接受答案,因为我正在测试它。我也考虑过如何检查灰度。也许我应该编辑问题以澄清这一点。
【解决方案2】:

检查的正确方法是:

对于 JPEG 文件,您应该使用位图的 PropertyItems 集合检查相应的属性。这可能包含适当的EXIF 标记以帮助确定位深度。下一步将解析JPEG header 并查找“帧开始”标记,然后查找图像中的组件数。

最后一种方法是将JPEG加载到Bitmap对象中,并与forumla比较像素数(宽*高*字节每像素)。因此,如果您加载位图并且实际原始数据的字节数等于(宽度 * 高度),那么您就知道图像每个像素有 1 个字节,因此是灰度。

您最后要检查的是位图本身的 PixelFormat。

对于TIFF 文件格式,您应该使用 PropertyItems 集合执行相同的操作,并检查规范中提到的相应标记。如果这些失败,则进行图像字节比较,最后使用 PixelFormat 属性作为最后的手段。

【讨论】:

  • 老实说,您不确定应该如何计算 jpeg 的“实际原始数据的字节数”。毕竟,jpeg 文件是经过压缩的。而且,虽然我猜这对于 jpeg 来说是正确的,但通常每像素 1 字节的图像只是 8 位索引图像,不一定是灰度图像。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-21
  • 2021-12-15
  • 2013-09-27
  • 2013-01-30
  • 2011-04-23
  • 1970-01-01
相关资源
最近更新 更多