我有一个应用程序,我需要检查我的扫描仪是否生成空白的tif文件。在这里我分享我的示例代码
private void button1_Click(object sender, EventArgs e)
{
string path2 = @"F:3333.tif";
string path = @"F:Document Scanned @ 1-blank.tif";
System.Drawing.Image img = System.Drawing.Image.FromFile(path);
byte[] bytes;
using (MemoryStream ms = new MemoryStream())
{
img.Save(ms, System.Drawing.Imaging.ImageFormat.Tiff);
bytes = ms.ToArray();
}
System.Drawing.Image img2 = System.Drawing.Image.FromFile(path2);
byte[] bytes2;
using (MemoryStream ms3 = new MemoryStream())
{
img2.Save(ms3, System.Drawing.Imaging.ImageFormat.Tiff);
bytes2 = ms3.ToArray();
}
bool t = false;
t = bytes.SequenceEqual(bytes2);
}
注意:空白的 tif 图像表示白页。
在上面的布尔值中,t 总是返回 true 为什么? 我使用了两个差异图像解决了
本质上,您正在比较两个 TIF 文件的字节(间接使用 Image
)。这可能由于各种原因而失败:
尺寸:如果两个图像的高度和宽度不完全相同,则字节序列当然会有所不同,即使两者都是完全白色的。
元数据:据我所知,TIF格式包含各种元数据。因此,即使两个文件具有相同的像素,它们也可能不同。我建议手动检查所有像素值(例如 Bitmap.GetPixel
),并将它们与白色(Color.FromArgb(255,255,255,255)
)进行比较。
噪音:您确定空白文件始终是纯白色(255,255,255)
吗?也许一些随机像素的值略有不同,例如(255,254,255)
......