Thema: Delphi Bilder vergleichen

Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.154 Beiträge
 
Delphi 12 Athens
 
#9

Re: Bilder vergleichen

  Alt 18. Mär 2004, 17:26
p und p2 sind nur Zeiger auf die Array's (ScanLine's) und diese sind immer unterschiedlich, da die beiden Array's nie den selben Speicherplatz verwenden

Du muß also die Daten vergleichen - ich hoffe mal, dass es mit CompareMem geht.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  i,w,r,x : integer ;
  BitMap, BitMap2 : TBitMap;
  P,P2 : PByteArray;
begin
 BitMap := TBitMap.create;
 BitMap2 := TBitMap.create;
 BitMap.LoadFromFile('vorlage.bmp'); //Laden der ausgangsdatei
 BitMap2.LoadFromFile('screenshot.bmp'); //Laden der vergleichsdatei
 r := 0;
 w := 0;
for i := 0 to BitMap.Height - 1 do
begin
 P := BitMap.ScanLine[i];
 P2 := BitMap2.ScanLine[i];
 if (Length(P) = Length(P2)) and CompareMem(P, P2, Length(P)) then
  r := r + 1 //anzahl gleicher Lines
  else
  w := w + 1; //anzahl unterschiedlicher lines
end;
Label1.caption := InttoStr(r);
Label2.caption := IntToStr(w);
end;
notfalls kann man's auch Byteweise vergleichen:
Delphi-Quellcode:
for i := 0 to BitMap.Height - 1 do
begin
 P := BitMap.ScanLine[i];
 P2 := BitMap2.ScanLine[i];
 B := Length(P) = Length(P2);
 if B then
  for i2 := 0 to Length(P) - 1 do
   if P[i2] <> P2[i2] then begin
    B := false;
    break;
   end;
 if B then
  r := r + 1 //anzahl gleicher Lines
  else
  w := w + 1; //anzahl unterschiedlicher lines
end;
(Angaben ohne Waffen)

[add]
ich sollte mal aufhören was nebenbei zu machen http://FNSE.de/15C.gif
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat