Ich bin auf ein ähnliches Problem gestoßen. Ich musste eine gute Methode zur Auswahl kontrastiver Schriftfarben finden, um Textbeschriftungen auf Farbskalen / Heatmaps anzuzeigen. Es musste eine universelle Methode sein und die erzeugte Farbe musste "gut aussehend" sein, was bedeutet, dass das einfache Erzeugen von Komplementärfarben keine gute Lösung war - manchmal erzeugte es seltsame, sehr intensive Farben, die schwer zu sehen und zu lesen waren.
Nach stundenlangen Tests und Versuchen, dieses Problem zu lösen, stellte ich fest, dass die beste Lösung darin besteht, weiße Schrift für "dunkle" Farben und schwarze Schrift für "helle" Farben auszuwählen.
Hier ist ein Beispiel für eine Funktion, die ich in C # verwende:
Color ContrastColor(Color color)
{
int d = 0;
// Counting the perceptive luminance - human eye favors green color...
double luminance = ( 0.299 * color.R + 0.587 * color.G + 0.114 * color.B)/255;
if (luminance > 0.5)
d = 0; // bright colors - black font
else
d = 255; // dark colors - white font
return Color.FromArgb(d, d, d);
}
Dies wurde für viele verschiedene Farbskalen (Regenbogen, Graustufen, Hitze, Eis und viele andere) getestet und ist die einzige "universelle" Methode, die ich herausgefunden habe.
Bearbeiten
Die Zählformel wurde a
in "Wahrnehmungsluminanz" geändert - es sieht wirklich besser aus! Bereits in meiner Software implementiert, sieht gut aus.
Bearbeiten 2
@WebSeed lieferte ein hervorragendes Beispiel für diesen Algorithmus: http://codepen.io/WebSeed/full/pvgqEq/