我正在开发一个处理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图像的简单测试示例是双色的。
感谢。
答案 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
您还可以查看图像的尺寸和分辨率,并将其与文件大小进行对比,以了解每个像素的位数。 (考虑到图像中的压缩和元数据,这可能不会非常精确。)