针对双色调TIFF图像的.NET测试没有捕获异常?

时间:2010-01-30 04:37:46

标签: c# .net graphics tiff

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

private bool IsBitonal(string filePath)
{
    bool isBitonal = false;
    try
    {
        Bitmap bitmap = new Bitmap(sourceFilePath);
        Graphics graphics = Graphics.FromImage(bitmap);
    }
    catch (Exception ex)
    {
        isBitonal = true;
    }
    return isBitonal;
}

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

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

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

感谢。

1 个答案:

答案 0 :(得分:4)

您可以查看位图的PixelFormat属性吗?

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

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

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

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