Esto me ha intrigado durante bastante tiempo.
¿Alguien sabe el algoritmo que utiliza Windows 7 Aero para determinar el color que se utilizará como el resaltado de desplazamiento rápido en los botones de la barra de tareas para las aplicaciones que se ejecutan actualmente?
Definitivamente se basa en el ícono de la aplicación, pero no puedo ver un patrón específico de dónde está obteniendo el valor de color.
Que no parece ser algo de lo siguiente:
- Un valor de color promedio de todo el ícono, de lo contrario, se volvería marrón
todo el tiempocon íconos multicolores como Chrome. - El color que más se usa en la imagen, de lo contrario, obtendría amarillo para el ícono de SQL Server Management Studio (sexto desde la izquierda). Además, el icono de Chrome utilizaba rojo, verde y amarillo en igual medida.
- Un color ubicado en ciertas coordenadas de píxeles dentro del icono, porque Chrome es rojo, lo que indica la parte superior del icono, y Notepad ++ (segundo desde la derecha) es verde, lo que indica la parte inferior del icono.
Hice esta pregunta en ux.stackoverflow.com y se cerró como fuera de tema, pero alguien respondió con lo siguiente:
Como lo describe Raymond Chen en este artículo del blog de MSDN :
Algunas personas preguntan cómo se hace. Realmente no es nada especial. El código solo busca el color predominante en el icono. (Y, dado que los diseñadores visuales son fanáticos de este tipo de cosas, el negro, el blanco y los tonos de gris no se consideran "colores" a los efectos de este cálculo).
Sin embargo, no estaba realmente satisfecho con esa respuesta porque no explica cómo se calcula el color "predominante". Seguramente en el icono de SQL Management Studio, el color predominante, al menos para mis ojos, es el amarillo. Sin embargo, lo más destacado es el verde. Quiero saber, específicamente, cuál es el algoritmo.
An average colour value from the entire icon, otherwise you would get brown all the time.
Eso no tiene sentido. Por ejemplo, ¿cómo los iconos de Skype , símbolo del sistema o µTorrent promedian a marrón? ಠ_ ఠ (La última vez que realicé ingeniería inversa de uno de los algoritmos de cálculo de color de Windows, me tomó varios años de atención intermitente y muchos tipos diferentes de trabajo para finalmente resolverlo. Parece que podría terminar pirateando esto uno en algún momento.)Respuestas:
Desde Bienvenido al escritorio de Windows 7 a exactamente 35 minutos en:
Estoy bastante seguro de que el hablante quería decir "RGB", ya que "RGBV" no parece ser una cosa. La parte "normalizada" realmente no importa; efectivamente cuenta cuántos píxeles caen en cada "cubo". Cada píxel, por lo tanto, se coloca en uno de los 27 cubos (dispuestos en una matriz tridimensional; la raíz cúbica de 27 es 3) en función de la posición del valor de cada uno de sus canales. Windows determina para cada canal de color si la intensidad de ese color se encuentra en la parte inferior, media o superior del rango. Parece que los rangos son de aproximadamente 0-60, 60-200 y 200-255. Los píxeles completamente transparentes no están incluidos en absoluto.
A continuación, Windows encuentra qué segmento tiene la mayor cantidad de píxeles, ignorando los negros, blancos y grises (los depósitos donde los tres canales estaban en el mismo tercio del rango). Eso explica el ícono de SQL Server Management Studio: gran parte de lo que nos parece amarillo en realidad se tira en el cubo "blanco" y se ignora.
Si no hay píxeles en ninguno de los depósitos aceptables, el programa obtiene una superposición azul claro independientemente del esquema de color del sistema. (Consulte el símbolo del sistema). Si un programa no tiene icono, obtiene una superposición blanca / translúcida, aunque el icono predeterminado de Windows produciría una superposición azul o verde.
No hay nada que impida que varios programas tengan el mismo color de resaltado. El último icono de Chrome, por ejemplo, obtiene el mismo amarillo que el Explorador de Windows 8.
Si hay vínculos, existe un orden predeterminado que no depende del orden de los colores en la imagen. Probablemente esto sea solo el resultado de la forma en que se encuentra el máximo: los cubos que se verifican anteriormente seguirán siendo el máximo, incluso si uno posterior se vincula. Parece que el amarillo es uno de los primeros cubos marcados.
Una vez que se descubre el cubo ganador, el color de resaltado parece establecerse en un color en algún lugar en el medio del rango del cubo.
Casos de prueba (los números provistos son valores RGB):
(255, 247, 209) → resaltado predeterminado
(47, 0, 0) → resaltado predeterminado
(60, 0, 0) → rojo oscuro
(66, 0, 0) → rojo oscuro
(165, 0, 0) → rojo
( 128, 128, 128) → resaltado predeterminado
(0, 148, 255) y (255, 0, 0) → rojo
(0, 255, 0) y (255, 216, 0) con la misma área → amarillo
igual pero invertido → amarillo
(255, 180, 180) → rojo claro
(255, 210, 210) → resaltado predeterminado
azul puro, amarillo puro, rojo puro y verde puro con la misma área → amarillo
(255, 61, 61) → rojo
(82, 0, 0) → rojo oscuro
fuente
Supongo que para cada color, comenzando desde la parte superior, obtienes los valores R, G y B, y de ellos tomas el más alto y el más bajo de los tres y los comparas. El color con el mayor espacio entre el más alto y el más bajo sería el color más brillante de la imagen. Ahora, en el caso de, digamos, el ícono de Chrome, puede haber varios colores vinculados para la mayor brecha, pero el rojo está en la parte superior, por lo que se encuentra primero, y eso es lo que domina esa imagen. (Supongo que podría probar esto diseñando su propio icono, como girar el logotipo de Chrome 120 grados y ver si domina el verde o el amarillo).
fuente
Por lo que entiendo: el sistema operativo tiene en cuenta más de unos pocos factores al determinar el color.
Esto puede estar muy mal, y es principalmente especulación, pero le brinda un método fácil de entender que el sistema operativo podría estar usando para determinar los colores. También explica cómo un programa sin un color predefinido y un icono que usa cantidades iguales de colores no se asigna blanco / marrón / negro, y por qué nunca se asignan negro, blanco y gris. También debe tener en cuenta que los programas que no tienen un ícono (todavía hay algunos) muestran un color transparente de seguimiento activo, lo que simplemente hace que el ícono sea "más brillante" al pasar el mouse sobre él.
fuente
Aquí hay un código VB que promedia los colores RGB de una imagen:
Realmente no está optimizado para su uso en un sistema operativo, pero debería darle una idea básica - Fuente
fuente