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