C# 快速确定两个位图是否相同?
如何(尽可能快地)通过值而不是引用确定两个位图是否相同?有什么快速的方法吗C# 快速确定两个位图是否相同?,c#,bitmap,C#,Bitmap,如何(尽可能快地)通过值而不是引用确定两个位图是否相同?有什么快速的方法吗 如果比较不需要非常精确怎么办?您可以使用简单的散列(如MD5)来确定它们的内容是否散列为相同的值 尝试比较两个文件的哈希值 using System; using System.IO; using System.Security.Cryptography; class FileComparer { static void Compare() { // Create the hashing
如果比较不需要非常精确怎么办?您可以使用简单的散列(如MD5)来确定它们的内容是否散列为相同的值 尝试比较两个文件的哈希值
using System;
using System.IO;
using System.Security.Cryptography;
class FileComparer
{
static void Compare()
{
// Create the hashing object.
using (HashAlgorithm hashAlg = HashAlgorithm.Create())
{
using (FileStream fsA = new FileStream("c:\\test.txt", FileMode.Open),
fsB = new FileStream("c:\\test1.txt", FileMode.Open)){
// Calculate the hash for the files.
byte[] hashBytesA = hashAlg.ComputeHash(fsA);
byte[] hashBytesB = hashAlg.ComputeHash(fsB);
// Compare the hashes.
if (BitConverter.ToString(hashBytesA) == BitConverter.ToString(hashBytesB))
{
Console.WriteLine("Files match.");
} else {
Console.WriteLine("No match.");
}
}
}
}
}
您可以先检查尺寸,如果尺寸不同,则中止比较 对于比较本身,您可以使用多种方式:
- CRC32
很快,但可能错了。。。可以用作第一次检查,如果不同,则它们是不同的。。。否则需要进一步检查 - MD5/SHA1/SHA512
不是那么快,而是相当精确 - 异或
XOR图像内容。。。出现第一个差异时中止 - 一些基于长宽比的预处理。600x400的图片能像300x300的一样吗
- 使用图形算法将它们缩小到100x100李>
- 还要减少颜色李>
- 然后逐像素比较结果(并设置错误treshold)李>
- 您需要对“不太精确”进行非常精确的定义
所有已经发布的校验和或散列方法仅适用于精确(像素和位)匹配
如果你想要一个与“他们看起来(有些)相似”相对应的答案,你需要更复杂的答案