Tuesday, June 12, 2007

Tónování barev obrázku

Dalo by se říci, že tato funkce patří již do kategorie efektů, i když je to jen velmi jednoduchý efekt. Jedná se – zjednodušeně řečeno – o to, že barvy obrázku budou tónovány uživatelem definovanou barvou, takže získají určitý barevný nádech. Je to stejné, jako bychom se na obrázek dívali přes průhlednou fólii dané barvy.
procedure Tonovani(aSource, aTarget: TBitmap; AColor: TColor);
var
i, j: integer;
s, t: pRGBTriple;
r, g, b: byte;
cl: Tcolor;
begin
cl := ColorToRGB(aColor);
r := GetRValue(cl);
g := GetGValue(cl);
b := GetBValue(cl);
ASource.PixelFormat := pf24bit;
ATarget.PixelFormat := pf24bit;
ATarget.Width := aSource.Width;
ATarget.Height := aSource.Height;
for i:= 0 to aSource.Height - 1 do
begin
s := aSource.ScanLine[i];
t := aTarget.ScanLine[i];
for j := 0 to aSource.Width - 1 do
begin
t^.rgbtRed := (r * s^.rgbtRed) div 255;
t^.rgbtGreen := (g * s^.rgbtGreen) div 255;
t^.rgbtBlue := (b * s^.rgbtBlue) div 255;
inc(s);
inc(t);
end;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if Image1.Picture <> nil then
if ColorDialog1.Execute then Tonovani(Image1.Picture.Bitmap, Image1.Picture.Bitmap, ColorDialog1.Color);
Image1.Repaint;
end;

Labels: