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.