Cela m'intrigue depuis un certain temps.
Quelqu'un connaît-il l'algorithme que Windows 7 Aero utilise pour déterminer la couleur à utiliser comme surbrillance du survol à chaud sur les boutons de la barre des tâches pour les applications en cours d'exécution?
Il est certainement basé sur l'icône de l'application, mais je ne vois pas de motif spécifique d'où il tire la valeur de la couleur.
Il ne semble pas être l'un des éléments suivants:
- Une valeur de couleur moyenne de l'icône entière, sinon vous obtiendrez
tout le temps dubrun avec des icônes multicolores comme Chrome. - La couleur la plus utilisée dans l'image, sinon vous obtiendrez le jaune pour l'icône SQL Server Management Studio (6e à partir de la gauche). De plus, l'icône Chrome utilisait le rouge, le vert et le jaune dans une égale mesure.
- 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 à 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 par ce qui suit:
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 recherche simplement la couleur prédominante dans l'icône. (Et, puisque les concepteurs visuels sont tenaces pour ce genre de chose, le noir, le blanc et les nuances de gris ne sont pas considérés comme des "couleurs" aux fins de 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. Sûrement sur l'icône SQL Management Studio, la couleur prédominante, à mes yeux au moins, est le jaune. Pourtant, le point culminant est vert. Je veux savoir précisément ce qu'est l'algorithme.
An average colour value from the entire icon, otherwise you would get brown all the time.
Cela n'a aucun sens. Par exemple, comment les icônes Skype , invite de commande ou µTorrent pourraient -elles brunir en moyenne? ಠ_ ఠ (La dernière fois que j'ai procédé à une ingénierie inverse d'un des algorithmes de calcul des couleurs de Windows, il a fallu plusieurs années d'attention et de beaucoup de différents types de travail pour finalement le comprendre. Il semble que je puisse finir par pirater ce un à un moment donné.)Réponses:
De Bienvenue sur le bureau Windows 7 à exactement 35 minutes en:
Je suis assez certain que le haut-parleur voulait dire "RGB", car "RGBV" ne semble pas être une chose. La partie "normalisée" n'a pas vraiment d'importance; il compte effectivement le nombre de pixels qui tombent dans chaque "compartiment". Par conséquent, chaque pixel est placé dans l'un des 27 compartiments (disposé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 situe dans la partie inférieure, moyenne ou supérieure de la plage. Il semblerait que les plages soient d'environ 0-60, 60-200 et 200-255. Les pixels complètement transparents ne sont pas du tout inclus.
Windows trouve ensuite quel compartiment a le plus de pixels, en ignorant les noirs, blancs et gris (les compartiments où les trois canaux étaient 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 est en fait vidé dans le compartiment "blanc" et est ignoré.
S'il n'y a pas de pixels dans l'un des compartiments acceptables, le programme obtient une superposition bleu clair quel que soit le jeu de couleurs du système. (Voir l'invite de commande.) Si un programme n'a pas d'icône, il obtient une superposition blanche / translucide même si l'icône par défaut de Windows produirait sinon une superposition bleue ou verte.
Rien n'empêche plusieurs programmes d'avoir la même couleur de surbrillance. La dernière icône Chrome, par exemple, a le même jaune que l'Explorateur de Windows 8.
S'il y a des liens, il y a un ordre prédéterminé qui ne dépend pas de l'ordre des couleurs dans l'image. C'est probablement juste un résultat de la façon dont le maximum est trouvé - les compartiments qui sont vérifiés plus tôt continueront d'être le maximum même si un plus tard est lié. Il semble que le jaune soit l'un des premiers godets vérifiés.
Une fois le seau gagnant découvert, la couleur de surbrillance semble être définie sur une couleur quelque part au milieu de la plage du seau.
Cas de test (les nombres fournis sont des valeurs RVB):
(255, 247, 209) → surbrillance par défaut
(47, 0, 0) → surbrillance par défaut
(60, 0, 0) → rouge foncé
(66, 0, 0) → rouge foncé
(165, 0, 0) → rouge
( 128, 128, 128) → surbrillance par défaut
(0, 148, 255) et (255, 0, 0) → rouge
(0, 255, 0) et (255, 216, 0) avec la même zone → jaune
identique mais inversé → jaune
(255, 180, 180) → rouge clair
(255, 210, 210) → surbrillance par défaut
bleu pur, jaune pur, rouge pur et vert pur avec la même zone → jaune
(255, 61, 61) → rouge
(82, 0, 0) → rouge foncé
la source
Je suppose que pour chaque couleur, en commençant par le haut, vous obtenez les valeurs R, G et B, et à partir de celles-ci, vous prenez les plus hautes et les plus basses des trois et les comparez. La couleur avec le plus grand écart entre le plus haut et le plus bas serait la couleur la plus lumineuse de l'image. Maintenant, dans le cas, par exemple, de l'icône Chrome, il peut y avoir plusieurs couleurs liées pour le plus grand écart, mais le rouge est en haut, donc il est rencontré en premier, et c'est donc ce qui domine pour cette image. (Je suppose que vous pouvez tester cela en concevant votre propre icône, comme faire pivoter le logo Chrome de 120 degrés et voir si le vert ou le jaune domine à la place.)
la source
D'après ce que je comprends, le système d'exploitation prend en compte plusieurs facteurs lors de la détermination de la couleur.
Cela peut très bien être faux, et c'est principalement de la spéculation, mais cela vous donne une méthode facile à comprendre que le système d'exploitation pourrait très bien utiliser pour déterminer les couleurs. Il explique également comment un programme sans couleur prédéfinie et une icône utilisant des quantités égales de couleurs ne sont pas affectés blanc / brun / noir et pourquoi le noir, le blanc et le gris ne sont jamais attribués. Vous devez également noter que les programmes qui n'ont pas d'icône (il y en a encore) affichent une couleur transparente de suivi à chaud, ce qui rend simplement l'icône plus `` lumineuse '' lorsqu'elle survole.
la source
Voici un code VB qui fait la moyenne des couleurs RVB d'une image:
Ce n'est pas vraiment optimisé pour une utilisation dans un système d'exploitation, mais cela devrait vous donner une idée de base - Source
la source