我正在开发一个处理 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/