Ich habe jetzt versucht den Code etwas anzupassen.
Ich brauch ja nur die Stellen wo es einen Unterschied der beiden Bildern mit dem Schwellwert gibt. Das heißt, es werden nicht mehr alle Pixel aufgelistet, sondern nur die, wo der (Differenz-)Wert > Schwellenwert.
Das Problem ist, dass bei der Ausgabe auf dem Stringgrid der (Differenz-)Wert immer Null ist.
Wo könnte der Fehler sein?
@Bummi und DeddyH:
An dieser Stelle mal ein Danke für eure geleistete Hilfe, Bemühungen und Tipps!
Delphi-Quellcode:
procedure TForm1.Addfound (nr,x,y,wert:Integer);
Begin
If stringgrid1.rowcount < (nr+1) then
stringgrid1.rowcount:= nr+1;
stringgrid1.cells[0,nr]:=inttostr(Nr);
stringgrid1.cells[1,nr]:=inttostr(X);
stringgrid1.cells[2,nr]:=inttostr(Y);
stringgrid1.cells[3,nr]:=inttostr(Wert);
stringgrid1.cells[0,0]:='Nr.';
stringgrid1.cells[1,0]:='X';
stringgrid1.cells[2,0]:='Y';
stringgrid1.cells[3,0]:='Diff-Wert';
end;
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
Var
farbe1, // Pixelfarbe im Image1
farbe2, // Pixelfarbe im Image2
wert, // Differenzwert
schwellwert, // Schwellwert zum Vergleich
x, // Laufindex
y, // Laufindex
z // Zähler
:integer;
begin
b:=image1.width; h:=image1.height; // Breite und Höhe der Imagefelder
image2.width:=b; image2.height:=h;
schwellwert:=spinedit1.value; // Voreinstellung 10
z:=0;
For x:=0 to b-1 do
Begin
For y:=0 to h-1 do
Begin
farbe1 := image1.canvas.pixels[x,y];
farbe2 := image2.canvas.pixels[x,y];
wert:= (farbe1 and clred)-(farbe2 and clred);
If wert > schwellwert then
inc(z);
AddFound(z,x,y,wert);
end;
end;
end;