Das Problem bei Muetzes Lösung ist, dass sich dabei u.U. der jeweilige Farbeindruck mehr oder minder stark bei verändert, und der else-Zweig ist mir auch grad etwas suspekt
Eine sehr saubere, wenn auch nicht ganz triviale Lösung wäre es, wenn du die in-Farbe in das HLS-Farbmodell umrechnest, den L-Anteil um (Maske-128)*2 verschiebst (und bei L<0 und L>255 clippst), und das wieder nach
RGB zurück wandelst.
In der englischen Wikipedia ist eine
Formel zur Umrechnung RGB->HLS angegeben, den Rückweg hab ich noch nicht als fertige Formeln gefunden - lässt sich aber ja herleiten.
Du musst nur aufpassen, dass du nicht den
HSV bzw. HSB Farbraum nimmst, da dieser bei voller Helligkeit kein Weiss annimmt, HLS bzw.
HSL schon. (
HSV und HSB werden meist gleichbedeutend verwendet, und HLS/
HSL auch.)
Edit: Ich seh grad, die en. Wikipedia nennt HSB synonym zu
HSL, nicht zu
HSV. Das wird gerne und oft durcheinander gebracht... Richtig ist das Modell, dass durch einen Doppelkegel repräsentiert wird, nicht durch einen einfachen Kegel. Damit ists eindeutig ^^)
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)