Nochmal danke für die Rückmeldungen.
Den "Äpfel mit Birnen"-Hinweis bezog ich die ganze Zeit darauf, dass ich an der einen Stele pix1=pix2 vergleiche, und an der anderen Stelle c1=c2. Aber -wenn ich's denn nun richtig verstehe- wolltest Du wohl sagen, pByte sich nicht für einen 4-Stelligen Byte-Vergleich eignet, respektive für die Arbeit mit Scanline generell. Das ist ein wichtiger Hinweis und kam bis dato bei mir so nicht an.
Mit dem Ansatz, dass schlicht der Datentyp für meine ScanLine-Variable falsch ist, habe ich hier im Forum wieder die Beispiele gefunden, die ich ursprünglich gesucht hatte. Diese arbeiten nicht mit pByte, sondern mit TRGBTripple(Array) oder TRGBQuad(Array) (teilweise selbstdefinierte Typen). Spontan konnte ich die Beispiele nicht adequat auf mein Problem übertragen (in den Beispielen ging es meist um's kopieren, nicht vergleichen), deshalb habe ich nochmal gegoogle und bin auf folgende Lösung gestoßen, die mein Problem löst, und nun auch mit Scanline die richtigen Werte zurückgibt:
https://www.tek-tips.com/viewthread.cfm?qid=1626211
Delphi-Quellcode:
function GetPixelSize(informat: TPixelFormat): Integer;
// returns proper byte size for input
begin
case informat of
pf8bit: Result := 1;
pf16bit: Result := 2;
pf24bit: Result := 3;
pf32bit: Result := 4;
else
Result := 0;
end;
end;
function MyBitmapsAreSame(Bitmap1, Bitmap2: TBitmap): Boolean;
var
scanptr1, scanptr2: pointer;
i: integer;
PixelSize: byte;
begin
Result := false;
if (Bitmap1.Width = Bitmap2.Width) and
(Bitmap1.Height = Bitmap2.Height) and
(Bitmap1.PixelFormat = Bitmap2.PixelFormat) then
begin
PixelSize := GetPixelSize(Bitmap1.PixelFormat);
for i := 0 to (Bitmap1.Height-1) do
begin
scanptr1 := Bitmap1.ScanLine[i];
scanptr2 := Bitmap2.ScanLine[i];
Result := CompareMem(scanptr1, scanptr2, Bitmap1.Width*PixelSize);
if Result = false then break;
end;
end;
end;
Nochmals danke für die Beiträge!
Delphi 10.4 32-Bit auf Windows 10 Pro 64-Bit, ehem. Delphi 2010 32-Bit auf Windows 10 Pro 64-Bit