Ja, kann man. Einfach die Beiträge durchlesen (Array vs. Pointer, Integer vs. FP mathematik (Stichwort: 'MulDiv')
Du kannst die Ergebnisse der Rechnung auch vorher einmal in einer Matrix vornehmen und dann nur noch auslesen. Dann hast Du einmalig overhead aber bei vielen Berechnungen könnte sich das lohnen, zumal Du wohl auf FP-Mathematik bestehst. Warum auch immer.
Delphi-Quellcode:
var
lkup : Array [0..255, 0..255] of Byte;
Begin
for i:=0 to 255 do for j:=0 to 255 do lkup[i,j] := round(i*j/255);
End;
...
for y := 0 to bm.Height-1 do begin
RGBA := bm.Scanline[y];
for x := 0 to bm.Width-1 do begin
if (RGBA^.rgbReserved <> 0) and (RGBA^.rgbReserved <> 255) then begin
if RGBA^.rgbRed <> 0 then RGBA^.rgbRed := lk[RGBA^.rgbReserved , RGBA^.rgbRed];
if RGBA^.rgbGreen <> 0 then RGBA^.rgbGreen := lk[RGBA^.rgbReserved, RGBA^.rgbGreen];
if RGBA^.rgbBlue <> 0 then RGBA^.rgbBlue := lk[RGBA^.rgbReserved, RGBA^.rgbBlue];
end;
inc(RGBA);
end;
end;