Assembler-Befehle wie LOOP sollte man heutzutage nicht mehr verwenden, die sind auf modernen CPUs ziemlich langsam. Vermutlich liegt es daran.
Wenn schon Assembler, dann wäre eher was mit SIMD interessant.
Ansonsten würde mir noch folgende reine Pascal-Alternative einfallen:
Delphi-Quellcode:
function HasTransparentRGBAValues (const bm:TBitmap): Boolean;
var
x, z: Integer;
pixel: PLongWord;
begin
Result := FALSE;
pixel := bm.Scanline[bm.Height-1];
z := bm.Width * bm.Height;
for x := 0 to z-1 do begin
begin
if (pixel^ and $FF000000) <> $FF000000 then
EXIT (TRUE);
inc(pixel);
end;
end;
Statt auf den Pointer einen Offset von 3 Bytes hinzuzuaddieren, werden die 32 Bit einfach maskiert. Ob das schneller ist, keine Ahnung.