c# - .NET 测试黑白 TIFF 图像而不捕获异常?

标签 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 图像的示例是双调的。

谢谢。

最佳答案

您可以检查位图的 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

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

关于c# - .NET 测试黑白 TIFF 图像而不捕获异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2166881/

相关文章:

c# - 播放随机 mp3 文件未知错误

c# - LINQ - 方法与查询语法差异

c# - EntityFramework.Migrations,在 C# 类中使用 DbMigrator

.net - dotfuscator并行优化?

c# - 了解委托(delegate)和任务

c# - 64 位 .NET 应用程序中是否忽略了 CallingConvention?

java - 我正在尝试制作一个矩形,它需要用户输入来获取尺寸

c++ - 可以支持动画 GIF 的快速图形库

c# - 反序列化包含另一个数组的字符串数组

algorithm - 再现具有原始形状的图像。 (图形优化问题)