我有一些关于图像比较的帖子,我尝试保存从屏幕捕获的图像,然后将其存储在文件系统中。
我使用转换方法将捕获的图像转换byte[]
为以供以后使用。
然后,当我想将它与第二个屏幕截图进行比较时,我加载(保存到的文件byte[]
)并将其与byte[]
以相同方式转换为的新截图进行比较。
现在,当同时进行第一次捕获和第二次捕获时,在内存中,进行比较的方法很少,我想首先与其他人分享这篇文章以寻找相同的答案并让我知道:
哪个更快,我如何控制相似度的百分比?
如果选择(相等的)百分比反对最快的计算方式......我可以忽略它,尽管当性能问题不存在时我可以在其他项目中使用它,并根据其需要
这些是我知道可用于完成任务的代码
我想与您核实更快的想法,以及是否有更好的方法,无论是否有平等百分比。谢谢你。
static bool ByteArrayCompare(byte[] a1, byte[] a2)
{
IStructuralEquatable eqa1 = a1;
return eqa1.Equals(a2, StructuralComparisons.StructuralEqualityComparer);
}
对比
public enum CompareResult
{
ciCompareOk,
ciPixelMismatch,
ciSizeMismatch
};
CompareResult cr = CompareResult.ciCompareOk;
byte[] hash1 = shaM.ComputeHash(btImage1);
byte[] hash2 = shaM.ComputeHash(btImage2);
//Compare the hash values
for (int i = 0; i < hash1.Length && i < hash2.Length
&& cr == CompareResult.ciCompareOk; i++)
{
if (hash1[i] != hash2[i])
cr = CompareResult.ciPixelMismatch;
}
后者正在使用System.Security.Cryptography