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