Hi Shrub,
Andrew

)
--------------------------------------------
type
TRGBArray = array[Word] of TRGBTriple;
pRGBArray = ^TRGBArray;
procedure Colorize(Src : TBitmap; Color : TColor);
var
r, g, b : integer;
x, y : integer;
SrcLine : pRGBArray;
SrcGap : integer;
Max : integer; begin
if (Color <> clNone) then begin
r := GetRValue(Color);
g := GetGValue(Color);
b := GetBValue(Color);
Src.PixelFormat := pf24bit;
SrcLine := Src.ScanLine[0];
SrcGap := Integer(Src.ScanLine[1]) - Integer(SrcLine);
for y := 0 to pred(Src.Height) do begin
for x := 0 to pred(Src.Width) do begin Max := SrcLine[x].rgbtRed;
if (SrcLine[x].rgbtGreen > Max) then Max := SrcLine[x].rgbtGreen;
if (SrcLine[x].rgbtBlue > Max) then
Max := SrcLine[x].rgbtBlue;
SrcLine[x].rgbtRed := MulDiv(r, Max, 255);
SrcLine[x].rgbtGreen := MulDiv(g, Max, 255);
SrcLine[x].rgbtBlue := MulDiv(b, Max, 255);
end; {for}
SrcLine := pRGBArray(Integer(SrcLine) + SrcGap);
end; {for}
end; {if}
end; {Colorize}