fall noch jemand eine copy & paste lösung braucht:
Delphi-Quellcode:
type
TRGB = record
Blue: Byte;
Green: Byte;
Red: Byte;
end;
PRGB = ^TRGB;
procedure Multi(src: TBitmap; r, g, b: Integer; Intensiv: Byte);
var
P: PRGB;
y, x: integer;
begin
for y:=0 to src.Height-1 do
begin
P:=src.scanline[y];
for x:=0 to src.Width-1 do
begin
P.Blue:=Round( ((P.Blue * (255 - Intensiv) + P.Blue * b * Intensiv / 255) / 255) );
P.Green:=Round( ((P.Green * (255 - Intensiv) + P.Green * g * Intensiv / 255) / 255) );
P.Red:=Round( ((P.Red * (255 - Intensiv) + P.Red * r * Intensiv / 255) / 255) );
Inc(P);
end;
end;
end;
anmerkung: muss man nicht als funktion machen oder das bitmap als var parameter übergeben, da scanline ja speicheradressen zurückliefert und diese dann auch direkt im speicher geändert werden.