Du machst für P3 das gleiche wie für P1.
Du machst auch nichts für Y sondern Du läufts aus allen 4 Ecken in die Diagonale Ecke und vergleichst alle PUNKTE die Du findest mit dem Schwellenwert, wenn Du einen Punkt(x,y) findest verlässt Du per Break/Break die Doppelschleife.
Am Schluss hast Du 4 Punkte(x,y) deren Mittelpunkt berechnet werden muss. Wenn einer der Punkte in X1 einen negativen Wert hat(dann haben alle einen), gab es keine Änderung.
Ich würde Dir für eine korrekte und schnelle Berechnung nochmals das eingangs erwähnte Image.Picture.Bitmap.Scanline ans Herz legen.
Im Zweifelsfalle per Image.Picture.Bitmap.Pixelformat:=pf24Bit passend umstellen und die Differenz per
Delphi-Quellcode:
Function ByteDifference(b1,b2:Byte):Byte;
var
i:Integer;
begin
i := Abs(b1 - b2);
Result := i;
end;
einen Fetzen Beispielcode, der für Dich zwar nicht passt aber das Prinzip der Scanlinezugriffe zeigt.
Delphi-Quellcode:
Procedure InvertBitMap24(bmp:TBitMap);
CONST
PixelCountMax = MaxInt / 3;
TYPE
pRGBTripleArray = ^TRGBTripleArray;
TRGBTripleArray = ARRAY[0..$effffff] OF TRGBTriple;
var
pscanLine : pRGBTripleArray;
x,y:Integer;
begin
for Y := 0 to bmp.Height -1 do
begin
pscanLine := bmp.Scanline[y];
for x := 0 to bmp.Width -1 do
begin
pscanLine[x].rgbtBlue := pscanLine[x].rgbtBlue XOR 255;
pscanLine[x].rgbtGreen := pscanLine[x].rgbtGreen XOR 255;
pscanLine[x].rgbtRed := pscanLine[x].rgbtRed XOR 255;
end;
end;
end;