Die inneren Verzweigungen wegzulassen könnte auch noch was bringen:
Delphi-Quellcode:
var
lkup : Array [0..255, 0..255] of Byte;
Begin
for i:=0 to 255 do for j:=0 to 255 do
begin
if (j <> 0) and (j <> 255) then // ist j <> 0 überhaupt korrekt hier?
lkup[i,j] := round(i*j/255)
else
lkup[i,j] := j;
end;
End;
...
for y := 0 to bm.Height-1 do begin
RGBA := bm.Scanline[y];
for x := 0 to bm.Width-1 do begin
RGBA^.rgbRed := lk[RGBA^.rgbReserved , RGBA^.rgbRed];
RGBA^.rgbGreen := lk[RGBA^.rgbReserved, RGBA^.rgbGreen];
RGBA^.rgbBlue := lk[RGBA^.rgbReserved, RGBA^.rgbBlue];
inc(RGBA);
end;
end;