2012-01-05 8 views
6

Duplicar posible:
given a background color, how to get a foreground color that make it readable on that background color?determinar automáticamente fontcolor óptima por backgroundColor

Me pregunto, si hay algún algoritmo para determinar la fontcolor óptima para facilitar la lectura por su color de fondo.

Por ejemplo: Creo un icono con texto y color dinámicos. Si el color es un poco oscuro, quiero que establezca el color de fuente en blanco y si es bastante brillante, quiero que esté en negro (o incluso grisáceo).

public DynamicIcon(String iconText, Color backgroundColor) 
    { 
    this.iconText = iconText; 
    this.backgroundColor = backgroundColor; 

    this.fontColor = determineFontColor(backgroundColor); 
    } 

    //This is what I need (Pseudocode): 
    private fontColor determineFontColor(Color backgroundColor) 
    { 
    if(backgroundColor == bright) 
     return Color.BLACK; 
    if(backgroundColor == dark) 
     return Color.WHITE; 
    //If possible: 
    if(backgroundColor == somethingInBetween) 
     return Color.GRAYISH; 
    } 

Desafortunadamente no encontré cualquier algoritmo de esa manera, Aun estoy un poco seguro, que ya existe. Alguien tiene alguna idea?

gracias, ymene

Respuesta

1

que teníamos que hacer algo así en nuestro sistema: en base a los antecedentes, coloreamos el tipo de letra de color negro o blanco. La solución que encontramos no es perfecta y elige el color incorrecto en algunas ocasiones excepcionales, pero estamos muy satisfechos con ella.

Esto es lo que hicimos:

int red = 0; 
int green = 0; 
int blue = 0; 

if (backgroundColor.red + backgroundColor.green + backgroundColor.blue < 383) { 
    red = 255; 
    green = 255; 
    blue = 255; 
} 

Y luego usamos red, greenblue y valores para crear un nuevo objeto Color.

El número mágico 383 es ​​el resultado de (255 + 255 + 255)/2

+1

gracias por compartir su idea. Lo intentaré. Podría ser lo suficientemente bueno para mí también. – crusam

+0

rgb (191,87,218) es un OSX morado bastante oscuro utiliza para el color de fondo de selección de lista (usan blanco para el color de primer plano de texto). 191 + 87 + 218 = 496, por lo que este algoritmo determinaría que es "claro" . La otra solución que tenía, que era convertir a HSB y luego usar el valor B como punto de corte, falló en el mismo ejemplo. – Trejkaz

Cuestiones relacionadas