Einzelnen Beitrag anzeigen

shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#13

Re: Bilder schnell miteinander vergleichen

  Alt 13. Nov 2006, 18:56
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.
Andreas
  Mit Zitat antworten Zitat