2

我正在开发一个处理 TIFF 图像的文档数据库应用程序。在注释图像时,为了让用户界面仅显示黑白作为双色调(Format1bppIndexed)图像的选择,而不是具有更高颜色深度的图像的多种颜色,我需要测试 TIFF 是否是双色调的。这是我的功能:

私有布尔 IsBitonal(字符串文件路径)
{
    布尔 isBitonal = false;
    尝试
    {
        位图 bitmap = new Bitmap(sourceFilePath);
        图形图形 = Graphics.FromImage(bitmap);
    }
    捕捉(例外前)
    {
        isBitonal =真;
    }
    返回是黑白的;
}

它有效,但并不优雅。此处描述了引发的索引像素格式异常:http: //msdn.microsoft.com/en-us/library/system.drawing.graphics.fromimage.aspx

为正常程序流捕获异常是不好的做法。此外,可以想象可能会引发不同的异常。有没有更好的方法来实现不依赖于捕获异常的 IsBitonal 函数?

我尝试在网上搜索信息,并找到了如何加载 TIFF 图像并通过转换为不同格式来避免异常的示例,但我找不到任何简单测试 TIFF 图像是否为双色调的示例。

谢谢。

4

1 回答 1

4

你能检查一下你的位图的 PixelFormat 属性吗?

private bool IsBitonal(string sourceFilePath)
{
    Bitmap bitmap = new Bitmap(sourceFilePath);
    return (bitmap.PixelFormat == PixelFormat.Format1bppIndexed)   
}

如果这不起作用,您应该能够查看 Bitmap 类中的 PropertyItems 集合并直接从图像中读取 TIFF 标签。

请参阅此处的 TIFF 规范:http ://www.awaresystems.be/imaging/tiff/tifftags/baseline.html

您还可以查看图像的尺寸和分辨率,并将其与文件大小进行对比,以了解每个像素有多少位。(考虑到图像中的压缩和元数据,这可能不是很精确)。

于 2010-01-30T06:10:32.160 回答