Kontrast ändern |
|
| System | Win9x, WinNT, Win2000, WinXP, Vista, Win7 |
|---|---|
| Ab Delphi-Version | Delphi 1 |
| Letzte Änderung | 28.09.2010 |
Um den Kontrast eines Bitmaps zu erhöhen bzw. verringern bringen wir erst einmal alle Farbwert auf den gleichen Wert, indem wir sie zunächst in Integer-Variablen umwandeln und dann 128 abziehen. Die Ergebnisse multiplizieren wir dann mit einem Konstanten Wert. Dieser wird als Parameter in unserer Prozedur angegeben. Nachfolgend wird die Nominierung der Farbwerte durch eine Addition von 128 wieder aufgehoben. Damit wir nicht jedes Pixel einzeln bearbeiten müssen, verwenden wir ein Array, in dem wir die Farbwerte vorberechnen.
Zuerst ist folgende Typenvereinbarung erforderlich:
TRGBArray = array[0..0] of TRGBTriple;
pRGBArray = ^TRGBArray;
Dies ist der Code:
var x,y,k: integer;
Ziel,Quelle: ^TRGBTriple;
Farbarray: array[0..255] of byte;
faktor: single;
begin
faktor := 1 + value /100;
for x := 0 to 255 do
begin
k := Round((integer(x) - 128)*faktor) + 128;
if k > 255 then Farbarray[x] := 255
else
if k < 0 then Farbarray[x] := 0
else Farbarray[x] := k;
end;
for y := 0 to Bitmap.Height-1 do
begin
Ziel := Bitmap.Scanline[y];
Quelle := Bitmap.Scanline[y];
for x := 0 to (Bitmap.Width-1) do
begin
Ziel^.rgbtred := Farbarray[Quelle^.rgbtred];
Ziel^.rgbtblue := Farbarray[Quelle^.rgbtblue];
Ziel^.rgbtgreen := Farbarray[Quelle^.rgbtgreen];
inc(ziel);
inc(quelle);
end;
end;
end;
Ein Aufruf sähe zum Beispiel aus:
begin
Kontrast(Image1.Picture.Bitmap,55);
Image1.Repaint;
end;