Home » Tutorials » Grafik und Spiele » Bitmaps

Bitmaps

Beispiel 2

Beispiel: Farbton ändern

Das folgende Beispiel ist eine Funktion um z.B. mittels dreier TTrackBar-Komponenten den Farbton eines Bildes zu ändern.
Die drei TrackBars müssen auf Min:= -100 und Max:= 100 eingestellt sein, auf dem Formular muss sich ein Image befinden, und im OnCreate des Forms sollte DoubleBuffered:= true gesetzt werden, um das Flackern zu verhindern.

procedure TForm1.Tone(Bit: TBitmap; r,g,b: Integer);
type
  PixArray = Array [1..3] of Byte;
var
  p: ^PixArray;
  h,w: Integer;
begin
  For h:=0 to Bit.Height-1 do
  begin
    p:= Bit.ScanLine[h];
    For w:=0 to Bit.Width-1 do
    begin
      If (round(p^[1] * ( 1 + b/100))<0) then p^[1]:=0 else
         If (round(p^[1] * ( 1 + b/100))>255) then p^[1]:=255
         else p^[1]:= round(p^[1] * ( 1 + b/100));
      If (round(p^[2] * ( 1 + g/100))<0) then p^[2]:=0 else
         If (round(p^[2] * ( 1 + g/100))>255) then p^[2]:=255
         else p^[2]:= round(p^[2] * ( 1 + g/100));
      If (round(p^[3] * ( 1 + r/100))<0) then p^[3]:=0 else
         If (round(p^[3] * ( 1 + r/100))>255) then p^[3]:=255
         else p^[3]:= round(p^[3] * ( 1 + r/100));
      Inc(p);
    end;
  end;
end;

procedure TForm1.TrackBar1Change(Sender: TObject);
begin
  Image1.Picture.Bitmap.LoadFromFile('C:einBitmap.bmp');
  Tone(Image1.Picture.Bitmap,TrackBar1.Position,TrackBar2.Position,
  TrackBar3.Position);
  Image1.Refresh;
end;

In TrackBar1Change wird das Bild jedesmal neu geladen, damit sich die Veränderungen immer auf das Original beziehen.
Das Ereignis muss natürlich jedem TrackBar zugeordnet werden.
Die IF-Abfage vor jeder Farbtonänderung ist wichtig, damit keine Werte entstehen können, die über die Grenzen der Farbwerte (0 – 255) gehen können.