2009-10-02 12 views
5

Estoy tratando de generar un color que podría resaltar un elemento como "seleccionado" en función del color del objeto actual. Intenté aumentar algunos de los valores de HSB, pero no puedo obtener una fórmula generalizada. Particularmente, tengo problemas cuando trabajo con blanco (un blanco más brillante no se ve muy diferente a un blanco normal). No hay ningún requisito que diga que necesito hacerlo más brillante, por lo que algún tipo de color "inverso" también funcionaría bien. ¿Hay algún algoritmo o técnica estándar para hacer algo como esto? Supongo que sí, pero no pude encontrar ninguno. No estoy seguro de si hay un nombre para esto.Algoritmo de selección de coloración

gracias,

Jeff

Respuesta

3

Tal vez el efecto Negativo:

seudo:

int red = originalColor.red 
int green = originalColor.green 
int blue = originalColor.blue 

int newRed = 255 - red 
int newGreen = 255 - green 
int newBlue = 255 - blue 

Color negativeColor = new Color(newRed, newGreen, newBlue) 

o la adición de un color azul-efecto:

int red = originalColor.red 
int green = originalColor.green 
int blue = originalColor.blue 

int newRed = 255 - red 
int newGreen = 255 - green 
int newBlue = 255 - blue + 100 
if newBlue > 255 { 
    newBlue = 255 
    newRed = newRed - 50 
    newGreen = newGreen - 50 
    if newRed < 0 {newRed = 0} 
    if newGreen < 0 {newGreen = 0} 
} 

Color negativeColor = new Color(newRed, newGreen, newBlue) 
+2

Sin contraste con (128, 128, 128) – recursive

3

Una técnica yo Puede usar para intercambiar el color de primer plano (texto) del elemento y su color de fondo. Si el texto y los colores de fondo de su elemento ya tienen un contraste agradable, el elemento seleccionado debería seguir luciendo bien.

alt text http://rcartaino.wordpress.com/files/2009/10/selected-tag.png

Esa es la técnica utilizada en este sitio (desbordamiento de pila) cuando el ratón sobre las etiquetas en su puesto. Pasan de DarkBlue-on-LightBlue a LightBlue-on-DarkBlue. Pruébalo para ver el efecto.

+0

Robert, esto funcionaría, sin embargo, el caso con el que estoy trabajando no tiene un fondo sólido. Es un elemento trazado en un fondo no sólido. –

3

Si está utilizando HSB, intente cambiar el tono por la mitad del valor máximo hacia arriba o hacia abajo, que debería darle el color "opuesto" (también llamado el color complementario). Sin embargo, esto no te hace ningún bien para el espectro gris, que no tiene matiz y por lo tanto se verá idéntico.

Si haces esto con tono y brillo, obtendrás una especie de "negativo", que funciona en todos los casos. Un verdadero negativo haría que "volteara" el valor de brillo alrededor del punto medio, pero eso no funcionaría para el gris medio, que seguiría siendo gris medio.

No siempre es posible hacer un color más brillante (¿qué haces con el blanco?), Por lo que cambiar el tono y el brillo a la mitad es el más confiable si buscas contraste.

Cuestiones relacionadas