Comment Windows 7 calcule-t-il la couleur utilisée pour le "suivi coloré au survol" de la barre des tâches ?

Cela m’intrigue depuis un bon moment.

Quelqu’un connaît-il l’algorithme que Windows 7 Aero utilise pour déterminer la couleur du surlignage au survol des boutons de la barre des tâches pour les applications en cours d’exécution ?

C’est clairement basé sur l’icône de l’application, mais je n’arrive pas à identifier un schéma spécifique pour l’origine de la valeur de couleur.

Cela ne semble pas être l’un des éléments suivants :

  • Une valeur de couleur moyenne de l’ensemble de l’icône, sinon vous obtiendriez du marron tout le temps avec des icônes multicolores comme Chrome.

  • La couleur la plus utilisée dans l’image, sinon vous obtiendriez du jaune pour l’icône de SQL Server Management Studio (6e en partant de la gauche). De plus, l’icône de Chrome utilise le rouge, le vert et le jaune en proportions égales.

  • Une couleur située à certaines coordonnées de pixels dans l’icône, car Chrome est rouge – indiquant le haut de l’icône – et Notepad++ (2e en partant de la droite) est vert – indiquant le bas de l’icône.

J’ai posé cette question sur ux.stackoverflow.com et elle a été fermée comme hors sujet, mais quelqu’un a répondu avec ceci :

Comme décrit par Raymond Chen dans cet article de blog MSDN :

Certaines personnes demandent comment c’est fait. Ce n’est vraiment rien de spécial. Le code
cherche simplement la couleur prédominante dans l’icône. (Et, comme les
designers visuels y sont pointilleux, le noir, le blanc et
les nuances de gris ne sont pas considérés comme des “couleurs” pour ce
calcul.)

Cependant, je n’étais pas vraiment satisfait de cette réponse car elle n’explique pas comment la couleur “prédominante” est calculée. Pour l’icône de SQL Management Studio, la couleur prédominante, à mes yeux du moins, est le jaune. Pourtant, le surlignage est vert. Je veux savoir, précisément, quel est l’algorithme.


Source : Super User

Tiré de Welcome to the Windows 7 Desktop à exactement 35 minutes :

C’est un histogramme de couleurs normalisé à travers 27 compartiments différents, et nous excluons les noirs, les blancs, les canaux alpha et les gris, puis utilisons la valeur RGBV [sic] la plus dominante…

Je suis assez certain que le présentateur voulait dire “RGB”, puisque “RGBV” ne semble pas exister. La partie “normalisé” n’a pas vraiment d’importance ; il s’agit essentiellement de compter combien de pixels tombent dans chaque “compartiment”. Chaque pixel est donc placé dans l’un des 27 compartiments (arrangés dans un tableau tridimensionnel ; la racine cubique de 27 est 3) en fonction de la position de la valeur de chacun de ses canaux. Windows détermine pour chaque canal de couleur si l’intensité de cette couleur se trouve dans la partie basse, moyenne ou haute de la plage. Il apparaît que les plages sont environ 0-60, 60-200 et 200-255. Les pixels complètement transparents ne sont pas du tout inclus.

Windows trouve ensuite quel compartiment contient le plus de pixels, en ignorant ceux correspondant au noir, au blanc et au gris (les compartiments où les trois canaux se trouvaient dans le même tiers de la plage). Cela explique l’icône de SQL Server Management Studio – une grande partie de ce qui nous apparaît jaune se retrouve en fait dans le compartiment “blanc” et est ignorée.

S’il n’y a aucun pixel dans l’un des compartiments acceptables, le programme obtient un surlignage bleu clair quelle que soit la palette de couleurs du système. (Voir l’Invite de commandes.) Si un programme n’a pas d’icône, il obtient un surlignage blanc/translucide même si l’icône par défaut de Windows produirait autrement un surlignage bleu ou vert.

Rien n’empêche plusieurs programmes d’avoir la même couleur de surlignage. La dernière icône de Chrome, par exemple, obtient le même jaune que l’Explorateur de Windows 8.

En cas d’égalité, il y a un ordre prédéterminé qui ne dépend pas de l’ordre des couleurs dans l’image. C’est probablement simplement le résultat de la façon dont le maximum est trouvé – les compartiments vérifiés en premier restent le maximum même si un compartiment ultérieur fait match nul. Il apparaît que le jaune est l’un des premiers compartiments vérifiés.

Une fois le compartiment gagnant découvert, la couleur de surlignage semble être définie à une couleur située quelque part au milieu de la plage du compartiment.

Cas de test (les nombres fournis sont des valeurs RGB) :

(255, 247, 209) → surlignage par défaut

(47, 0, 0) → surlignage par défaut

(60, 0, 0) → rouge foncé

(66, 0, 0) → rouge foncé

(165, 0, 0) → rouge

(128, 128, 128) → surlignage par défaut

(0, 148, 255) et (255, 0, 0) → rouge

(0, 255, 0) et (255, 216, 0) avec la même surface → jaune

idem mais inversé → jaune

(255, 180, 180) → rouge clair

(255, 210, 210) → surlignage par défaut

bleu pur, jaune pur, rouge pur et vert pur avec la même surface → jaune

(255, 61, 61) → rouge

(82, 0, 0) → rouge foncé