Komplementärfarbe bilden
-
Ich möchte dem Nutzer die Möglichkeit geben, die Hintergrundfarbe eines Textfeldes zu ändern. Um den Text immer lesbar zu halten, soll dieser sich automatisch in die Koplementärfarbe färben. Jetzt weiß ich allerdings nicht, welches Kriterium Komplementärfarben haben, möglicherweise sind sie einfach das bitweise Komplement (in RGB) oder es gibt eine vordefinierte Funktion. Also Formeln, Vorschläge?
-
Dieser Thread wurde von Moderator/in evilissimo aus dem Forum C++ in das Forum Rund um die Programmierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Hi!
In deinem Fall würd' ich einfach die Channelwerte (r, g oder b) von 255 subtrahieren und zu einem 24 Bit Wert shiften.
grüße
-
Invertierte Farbe = (255,255,255) - (R,G,B)
-
Hi!
Wenn du Text und Hintergrund in klomplementären Farben anlegst, heisst das lange nicht, dass man den Text dann vernünftig lesen kann. 1.) können sich die Farben 'beissen', und 2.) sehen sie nahezu gleich aus, wenn sich die RGB-Werte alle im Bereich um 127 befinden.
-
Reicht es nicht aus, die Helligkeit vom Hintergrund zu überprüfen (zB mittelwert aus R, G und B, wie auch immer), und entsprechend einem Threshold die Schriftfarbe auf schwarz oder weiß zu setzen ?
Das wäre zumindest mein erster Ansatz, ist viel einfacher und wahrscheinlich angenehmer zu lesen.
edit: Für die Helligkeit des Hintergrunds ist vielleicht der Helligkeitswert des YUV-Farbsystems eine Überlegung wert. (Y=0.299*R + 0.587*G + 0.114*B)
-
Ich würde weißen Text mit schwarzer Umrandung verwenden. Dann solltest du den Text egtl immer lesen können!

grüße
-
fuer menschen ist die farbe nicht so wichtig, wichtiger ist der helligkeitsunterschied damit man etwas lesen kann. also wie vorgeschlagen, auf ein anderes format umwandeln, z.b. YCbCr, dann Y=Y>=128?0:255;
und wieder zurueckwandeln.
-
Man könnt auch einfach die Farbe des Pixels und die Farbe des zu zeichnenden Pixels XOR'en und die resultierende Farbe zeichnen.