Jaki jest najszybszy sposób na porównanie dwóch bitmap o równych rozmiarach, aby określić, czy są one identyczne?

Próbuję napisać funkcję określającą, czy dwie bitmapy o równych rozmiarach są identyczne czy nie. Funkcja, którą mam teraz, po prostu porównuje piksel na raz w każdej bitmapie, zwracając wartość false na pierwszym nierównomiernym pikselu.

Chociaż to działa i działa dobrze w przypadku małych map bitowych, w produkcji będę używał tego w wąskiej pętli i na większych obrazach, więc potrzebuję lepszego sposobu. Czy ktoś ma jakieś zalecenia?

Językiem, którego używam, jest przy okazji C # - i tak, już używam metody .LockBits. =)

Edytować: Zakodowałem implementacje niektórych podanych sugestii i oto testy. Konfiguracja: dwie identyczne bitmapy (najgorszy przypadek), rozmiar 100x100, po 10 000 powtórzeń każdy. Oto wyniki:

CompareByInts (Marc Gravell) :   1107ms
CompareByMD5  (Skilldrick)   :   4222ms
CompareByMask (GrayWizardX)  :    949ms

W CompareByInts i CompareByMask używam wskaźników do bezpośredniego dostępu do pamięci; w metodzie MD5 używam Marshal.Copy do pobrania tablicy bajtów i przekazania jej jako argumentu MD5.ComputeHash. CompareByMask jest tylko nieznacznie szybsza, ale biorąc pod uwagę kontekst, myślę, że każde ulepszenie jest przydatne.

Dziękuję wszystkim. =)

Edytuj 2: Zapomniałem włączyć optymalizacje - dzięki temu odpowiedź GrayWizardX może być jeszcze większa:

CompareByInts   (Marc Gravell) :    944ms
CompareByMD5    (Skilldrick)   :   4275ms
CompareByMask   (GrayWizardX)  :    630ms
CompareByMemCmp (Erik)         :    105ms

Ciekawe, że metoda MD5 w ogóle się nie poprawiła.

Edytuj 3: Wysłałem moją odpowiedź (MemCmp), która wyrzuciła inne metody z wody. o.O

questionAnswers(9)

yourAnswerToTheQuestion