Hier ist mein (ungetesteter) Vorschlag.
Es hat folgende Vorteile:
* man kann eine Maske angeben, um Farbunterschiede unterhalb einer bestimmten Grenze auszublenden
* durch Verwendung von Zeigern wird der Vergleich schneller
* die innere Schleife ist schneller, da sie auf 0 runterzählt
* der Code ist "kurz & knackig"
Delphi-Quellcode:
function CompareImagesShmia(Image1,Image2:TBitmap; mask:Cardinal=$00FEFEFE):Int64;
var x,y:integer;
P1,P2: PByte;
begin
result := 0;
for y := 0 to Image1.Height -1 do
begin
P1 := Image1.ScanLine[y];
P2 := Image2.ScanLine[y];
for x := Image1.Width-1 downto 0 do
begin
if (PInteger(P1)^ and mask) <> (PInteger(P2)^ and mask) then
inc(result);
Inc(P1, 3); Inc(P2, 3);
end;
end;
end;
Nachtrag:
die Variable mask muss evtl. mit $FEFEFE00 vorbelegt werden.
Für den Vergleich werden ja 4 Bytes=Integer gelesen; es kommt nun drauf an,
ob das überzählige Byte MSB oder LSB ist.