Da die Pixel des Textes an den Ecken und Schrägen z.T. halbtransparent gezeichnet sind, scheint dort der Hintergrund durch.
Das erschwert die Sache etwas. Ist der Text schwarz gezeichnet, kann man diesen Umstand nutzen.
In diesem Beispiel wird nur die Helligkeit des Ausgangsbildes übernommen.
Die graue Bereiche werden eingefärbt.
Weiße oder schwarze Flächen bleiben unverändert.
Delphi-Quellcode:
// Pixelformat pf24Bit
// NewHue 0..100
// NewSaturation 0..100
var
NewHue, NewSaturation, Hue, Luminance, Saturation: Word;
p: ^TBGR;
c: TColor;
x, y: Integer;
begin
{...}
for y := 0
to Height - 1
do
begin
p := ScanLine[y];
for x := 0
to Width - 1
do
begin
c :=
RGB(p^.R, p^.G, p^.B);
ColorRGBToHLS(c, Hue, Luminance, Saturation);
c := ColorHLSToRGB(NewHue, Luminance, NewSaturation);
p^.B := GetBValue(c);
p^.G := GetGValue(c);
p^.R := GetRValue(c);
Inc(p);
end;
end;
{...}
Alternativ könnte man z.B. die Helligkeit anheben (z.B. Luminance := Round(Luminance * 0.2) ).