me encontré con un problema similar. Tenía que encontrar un buen método para seleccionar el color de fuente contrastivo para mostrar etiquetas de texto en escala de colores/mapas de calor. Tenía que ser un método universal y el color generado tenía que ser "atractivo", lo que significa que la simple generación de colores complementarios no era una buena solución; a veces generaba colores extraños, muy intensos, difíciles de ver y leer.
Después de largas horas de pruebas y tratando de resolver este problema, descubrí que la mejor solución es seleccionar la fuente blanca de colores "oscuras", y la fuente para los colores negro "brillantes".
Aquí está un ejemplo de la función que estoy usando en C#:
Color ContrastColor(Color color)
{
int d = 0;
// Counting the perceptive luminance - human eye favors green color...
double a = 1 - (0.299 * color.R + 0.587 * color.G + 0.114 * color.B)/255;
if (a < 0.5)
d = 0; // bright colors - black font
else
d = 255; // dark colors - white font
return Color.FromArgb(d, d, d);
}
Esto fue probado para muchas diversas colorscales (arco iris, escala de grises, el calor, el hielo, y muchos otros) y es el único método "universal" Lo descubrí.
Editar
Un cambio en la fórmula de contar a
a "luminancia perceptiva" - lo que realmente se ve mejor! Ya lo implementé en mi software, se ve genial.
Editar 2 @WebSeed proporciona un gran ejemplo de trabajo de este algoritmo: http://codepen.io/WebSeed/full/pvgqEq/
probablemente no es importante, pero es posible que desee una mejor función para calcular el brillo http: // stackoverflow.com/preguntas/596216/fórmula para determinar-brillo-de-color RGB –
Esto parece que va a ser perfecto. –
mejorado el código - ahora es aún mejor – Gacek