this code should help you
Delphi-Quellcode:
type TRGBArray = array[0..10000] of TRGBTriple;
PRGBArray = ^TRGBArray;
var R,G,B : integer; //range 0 to 100
x,y : integer;
d1,d2,d3 : double;
grey : integer;
Row : PRGBArray;
begin
d1 := R / 100; //calc percent
d2 := G / 100;
d3 := B / 100;
for y := 0 to bmp1.Height - 1 do
begin
row := BMP1.scanline[y];
for x := 0 to BMP1.Width - 1 do
with row[x] do
begin
grey := round((d1 * rgbtRed) + (d2 * rgbtGreen) + (d3 * rgbtBlue)); //calculate
if grey > 255 then grey := 255; //check range
rgbtRed := grey; //set values
rgbtGreen := grey;
rgbtBlue := grey;
end;
end;
end;