Как быстрее всего сравнить два растровых изображения одинакового размера, чтобы определить, являются ли они идентичными?

Я пытаюсь написать функцию, чтобы определить, являются ли две битовые карты одинакового размера идентичными или нет. Функция, которая у меня есть сейчас, просто сравнивает пиксель за раз в каждом растровом изображении, возвращая ложь в первом неравном пикселе.

Хотя это работает и хорошо работает для небольших растровых изображений, на производстве я собираюсь использовать это в тесном цикле и на больших изображениях, поэтому мне нужен лучший способ. У кого-нибудь есть рекомендации?

Кстати, я использую язык 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 вообще не улучшился.

Редактировать 3: Написал мой ответ (MemCmp), который взорвал другие методы из воды. o.o

Ответы на вопрос(9)

Ваш ответ на вопрос