Bin mir da nicht so sicher, wegen des Overheads. Hatte ich zwar schon mal gemacht, allerdings zeigt mir AQtime seltsame Messwerte an (0,3 MS, was nicht sein kann) und bei einem Extra-Test-Projekt schwanken die einzelnen Testergebnisse zwischen 28 und 56 MS:
Delphi-Quellcode:
type
TRGB32 = packed record
B, G, R, A: Byte;
end;
TRGB32Array = packed array[0..MaxInt div SizeOf(TRGB32)-1] of TRGB32;
PRGB32Array = ^TRGB32Array;
function HasTransparentRGBAValuesx (const bm:TBitmap): Boolean;
var
LineLen: Integer; found: boolean;
FirstLine : PRGB32Array;
begin
Found := false;
if bm.Width = 0 then exit;
FirstLine := bm.ScanLine[0];
LineLen := - bm.width;
TParallel.For (0, bm.Height-1, procedure (y:Integer; S: TParallel.TLoopState)
var
x, p: Integer;
begin
if not s.ShouldExit then begin
P := y*LineLen;
for x := 0 to bm.Width-1 do begin
if FirstLine[P+x].A <> 255 then begin
found := true;
s.Break;
break;
end;
end;
end;
end);
Result := found;
end;
Insofern wäre mir hier eine Variante ohne Parallelisierung mit eindeutig besseren Ergebnissen lieber