Я пытаюсь написать функцию, чтобы определить, идентичны ли два растровых изображения одинакового размера или нет. Функция, которую я имею прямо сейчас, просто сравнивает пиксель за раз в каждом растровом изображении, возвращая false на первом неравном пикселе.
Пока это работает и хорошо работает для небольших растровых изображений, в производстве я собираюсь использовать это в узком цикле и на больших изображениях, поэтому мне нужен лучший способ. Есть ли у кого-нибудь рекомендации?
Язык, который я использую, - это, кстати, - и да, я уже использую метод .LockBits. =)
Изменить. Я закодировал реализацию некоторых предложенных предложений, и вот эталонные тесты. Настройка: две идентичные (худшие) растровые изображения, размером 100x100, с 10 000 итераций каждый. Вот результаты:
CompareByInts (Marc Gravell) : 1107ms
CompareByMD5 (Skilldrick) : 4222ms
CompareByMask (GrayWizardX) : 949ms
В CompareByInts и CompareByMask Я использую указатели для прямого доступа к памяти; в методе MD5 я использую Marshal.Copy для извлечения байтового массива и передаю это как аргумент MD5.ComputeHash. CompareByMask только немного быстрее, но, учитывая контекст, я думаю, что любое улучшение полезно.
Спасибо всем. =)
Изменить 2: забыл включить оптимизацию - это делает GreyWizardX более равносильным:
CompareByInts (Marc Gravell) : 944ms
CompareByMD5 (Skilldrick) : 4275ms
CompareByMask (GrayWizardX) : 630ms
CompareByMemCmp (Erik) : 105ms
Интересно, что метод MD5 вообще не улучшался.
Редактировать 3. Написал мой ответ (MemCmp), который вывел другие методы из воды. o.o