我正在尝试编写一个函数来确定两个相等大小的位图是否相同.我现在的功能只是在每个位图中一次比较一个像素,在第一个不相等的像素处返回false.
虽然这可行,并且适用于小位图,但在生产中我将在紧密循环和更大的图像中使用它,所以我需要一种更好的方法.有没有人有任何建议?
我使用的语言就是C# - 是的,我已经在使用.LockBits方法了.=)
编辑:我编写了一些给出的建议的实现,这里是基准测试.设置:两个相同(最坏情况)的位图,大小为100x100,每个迭代次数为10,000次.结果如下:
CompareByInts (Marc Gravell) : 1107ms
CompareByMD5 (Skilldrick) : 4222ms
CompareByMask (GrayWizardX) : 949ms
Run Code Online (Sandbox Code Playgroud)
在CompareByInts和CompareByMask中,我使用指针直接访问内存; 在MD5方法中,我使用Marshal.Copy来检索字节数组并将其作为参数传递给MD5.ComputeHash.CompareByMask只是稍快一点,但考虑到上下文,我认为任何改进都是有用的.
感谢大家.=)
编辑2:忘了打开优化 - 这样做可以让GrayWizardX的答案更加强大:
CompareByInts (Marc Gravell) : 944ms
CompareByMD5 (Skilldrick) : 4275ms
CompareByMask (GrayWizardX) : 630ms
CompareByMemCmp (Erik) : 105ms
Run Code Online (Sandbox Code Playgroud)
有趣的是,MD5方法根本没有改进.
编辑3:发布了我的答案(MemCmp),它将其他方法从水中吹走.OO