Klar kann ich machen. Weil ich keine Lust hatte die Farbkonvertierung selbst zu schreiben (warum ist sowas nicht schon in Delphi drin?
) habe ich mir für die Konvertierung schnell was zusammengegoogelt, von daher keine Garantie auf den Teil:
Code zum Konvertieren von
RGB<->HSB (
HSL,
HSV, HSB.. Alle mehr oder weniger das Gleiche, Hue ist das was wir in erster Linie brauchen und das ist überall gleich):
https://codereview.stackexchange.com...b-cmyk-and-hsv
Mein Code (Nur hässlicher Testcode für Inspiration, keine Copy&Paste-Qualität
)
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var bmp: TBitmap;
rgb: PRGBQuad;
i,j: Integer;
tmpColor: TColorRec;
begin
bmp := TBitmap.Create;
try
bmp.Assign(Image1.Picture.Bitmap);
bmp.PixelFormat := pf32bit;
for i := 0
to bmp.Height-1
do
begin
rgb := bmp.ScanLine[i];
for j := 0
to bmp.Width-1
do
begin
tmpColor := TColor(
rgb^);
// 175-190 ca. sind Gelbtöne. Und wenn mit einem Schwellenwert für die Sättigung kann man noch ein paar Graus rausfiltern
if ((tmpColor.Hue >= 175)
and (tmpColor.Hue <= 190))
and (tmpColor.Saturation > 0.15)
then
begin
// Bei SetHue erwartet er komischerweise Werte von 0.0-1.0 statt 0-360..
// Mit SetHue wird nur der Farbton geändert, Sättigung und Helligkeit bleiben
// Kannst dir da nen Wert zwischen 0 und 1 aussuchen:
tmpColor.SetHue(0.1);
rgb^ := TRGBQuad(TColor(tmpColor));
end;
inc(
rgb);
end;
end;
Image2.Picture.Bitmap := bmp;
finally
bmp.Free;
end;
end;
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."