Entwickler-Ecke
Multimedia / Grafik - Farbe heller machen
maxk - So 19.01.03 17:44
Titel: Farbe heller machen
Ich habe ein Problem beim "erhellen" einer Farbe, die mir als RGB-Wert vorliegt. Wie im Farbfenster von Windows möglich möchte ich diese Farbe heller machen. Wie kann ich das machen? Ich muss hier gestehen, dass ich in Farbenlehre immer geschlafen habe. :lol:
Aus FF0000 (Rot, Helligkeit 120) wird z.B. FF0A0A (Helligkeit 125) - aber wie?
maxk
PS: Ich poste hier, da Farbe mit Grafik zutun hat.
tommie-lie - So 19.01.03 19:33
uiii.
Also bei reinfarben weiß ich's. Wenn du zum Beispiel Blau hast. Für Blau (ebenso wie rot und grün) gibt es einen reinfarbwert: 0,0,255 (RGB). Dunkler wird's nun, wenn du die 255 kleiner machst. Heller wird's, wenn du die beiden 0en gleichmäßig (!) erhöhst. Wie das Verhältnis dabei sit, weiß ich leider auch nicht. Für seeehr grobe Helligkeitsveränderungen geht's aber so. Wie es bei Mischwerten (Mittelblaugrüngelb oder sowas in der Richtung) aussieht, weiß ich's leider auch nicht genau.
torstenheinze - So 19.01.03 19:49
ich denke, dann mus man einfach einen wert so lassen (z-B. blau) und ändert grün und rot um den gleichen wert
matze - So 19.01.03 20:33
also wenn du ein reines blau hast, und dann rot und grün um die gleichen werte anhebst ändert sich das blau in richtuing weiß ab !
Rool - So 19.01.03 21:16
Titel: So gehts:
Hier der Code:
zuerst mal n paar deklarationen:
Quelltext
1: 2: 3:
| RGBColorType = record R,G,B: Longint end; |
dann ne nebenfunktion und die hauptfunktion:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29:
| function RGBsplit(Col:TColor):RGBColorType; var cRGB: RGBColorType; begin cRGB.B := (Col And 16711680) div 65536; cRGB.G := (Col And 65280) div 256; cRGB.R := Col And 255; Result:=cRGB end;
function IncColor(Col: TColor; Increments: Integer): TColor; var cRGB: RGBColorType; begin cRGB:=RGBSplit(ColorToRGB(Col)); if not (cRGB.R + Increments>255) then Inc(cRGB.R,Increments) else cRGB.R:=255; if not (cRGB.G + Increments>255) then Inc(cRGB.G,Increments) else cRGB.G:=255; if not (cRGB.B + Increments>255) then Inc(cRGB.B,Increments) else cRGB.B:=255; result:=RGB(cRGB.R,cRGB.G,cRGB.B);
end; |
Mit IncColor erhöhst du die Farbe um Increments!!
Hoffe es hat dir geholfen!
Aya - So 19.01.03 21:20
Hi,
ich kann dir die Theorie mal erklären *g*
Also... du hast die Farbe in RGB, wandelst sie in HSL (Hue, Saturation, Light) um, erhöst den Hue wert und wandelst wieder in RGB um... :)
Units/Kompos für HSLtoRGB etc gibt's genügend, such einfach mal.
Au'revoir,
Aya~
maxk - Mo 20.01.03 11:39
:P Danke, ich werd's mal ausprobieren!
maxk
Rool - Mo 20.01.03 13:34
Titel: Verbesserung...
Was ich noch zu meinem Code oben sagen muss ist, dass wenn du ne Farbe nimmst wie zB. clBtnFace, musst du sie erst in RGB umwandeln. also zb. so:
Quelltext
1:
| Self.Color:=IncColor(ColorToRGB(clBtnFace),10); |
maxk - Di 21.01.03 16:56
Es funzt! :beer:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!