【问题标题】:.NET test for bitonal TIFF image without trapping exception?.NET 测试双色调 TIFF 图像而不捕获异常?
【发布时间】:2011-01-11 03:11:41
【问题描述】:

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

private bool IsBitonal(string filePath)
{
    布尔 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 图像的示例是双色的。

谢谢。

【问题讨论】:

    标签: c# .net graphics tiff


    【解决方案1】:

    你能检查一下你的位图的 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

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

    【讨论】:

    • 检查 bitmap.PixelFormat 属性有效。感谢您的信息。
    猜你喜欢
    • 2013-12-20
    • 1970-01-01
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    • 1970-01-01
    • 2015-04-14
    • 2014-06-03
    • 1970-01-01
    相关资源
    最近更新 更多