Das hat mich schon länger fasziniert.
Kennt jemand den Algorithmus, den Windows 7 Aero verwendet, um die Farbe zu bestimmen, die als Hot-Tracking-Hover-Highlight auf den Taskleistenschaltflächen für derzeit ausgeführte Apps verwendet werden soll?
Es basiert definitiv auf dem Symbol der App, aber ich kann kein bestimmtes Muster erkennen, von dem der Farbwert stammt.
Es nicht scheint eine der folgenden zu sein:
- Ein durchschnittlicher Farbwert des gesamten Symbols, ansonsten würden Sie mit mehrfarbigen Symbolen wie Chrome die ganze
Zeitüber braun . - Die Farbe, die im Bild am häufigsten verwendet wird, andernfalls wird das SQL Server Management Studio-Symbol gelb (6. von links). Auch das Chrome-Symbol verwendete Rot, Grün und Gelb gleichermaßen.
- Eine Farbe, die sich an bestimmten Pixelkoordinaten innerhalb des Symbols befindet, da Chrome rot ist - was auf den oberen Rand des Symbols hinweist - und Notepad ++ (2. von rechts) grün ist - was auf den unteren Rand des Symbols hinweist.
Ich habe diese Frage auf ux.stackoverflow.com gestellt und sie wurde als Off-Topic geschlossen, aber jemand antwortete mit:
Wie von Raymond Chen in diesem MSDN-Blogartikel beschrieben :
Einige Leute fragen, wie es gemacht wird. Es ist wirklich nichts Besonderes. Der Code sucht nur nach der vorherrschenden Farbe im Symbol. (Und da visuelle Designer für diese Art von Dingen ein Problem sind, werden Schwarz, Weiß und Graustufen für die Zwecke dieser Berechnung nicht als "Farben" betrachtet.)
Mit dieser Antwort war ich jedoch nicht wirklich zufrieden, da sie nicht erklärt, wie die "vorherrschende" Farbe berechnet wird. Auf dem SQL Management Studio-Symbol ist die vorherrschende Farbe, zumindest für meine Augen, gelb. Das Highlight ist jedoch grün. Ich möchte speziell wissen, was der Algorithmus ist.
An average colour value from the entire icon, otherwise you would get brown all the time.
Das ergibt keinen Sinn. Wie würden sich beispielsweise die Symbole für Skype , Eingabeaufforderung oder µTorrent im Durchschnitt zu braun entwickeln? ಠ_ ఠ (Als ich das letzte Mal einen der Farbberechnungsalgorithmen von Windows rückentwickelt habe, hat es einige Jahre gedauert, bis ich ihn herausgefunden habe. Es sieht so aus, als würde ich ihn vielleicht hacken.) eines irgendwann.)Antworten:
Von Willkommen auf dem Windows 7-Desktop in genau 35 Minuten in:
Ich bin mir ziemlich sicher, dass der Sprecher "RGB" sagen wollte, da "RGBV" keine Sache zu sein scheint. Der "normalisierte" Teil spielt eigentlich keine Rolle; Es zählt effektiv, wie viele Pixel in jeden "Eimer" fallen. Jedes Pixel wird daher in einen der 27 Buckets (angeordnet in einem dreidimensionalen Array; die Kubikwurzel von 27 ist 3) basierend auf der Position jedes Werts seiner Kanäle gelegt. Windows bestimmt für jeden Farbkanal, ob die Intensität dieser Farbe im unteren, mittleren oder oberen Bereich des Bereichs liegt. Es scheint, dass die Bereiche zwischen 0 und 60, zwischen 60 und 200 und zwischen 255 liegen. Vollständig transparente Pixel sind überhaupt nicht enthalten.
Windows findet dann, welcher Bucket die meisten Pixel hat, wobei der schwarze, der weiße und der graue Bucket ignoriert werden (die Buckets, in denen sich alle drei Kanäle im selben Drittel des Bereichs befanden). Das erklärt das SQL Server Management Studio-Symbol - vieles, was uns gelb erscheint, wird tatsächlich in den "weißen" Eimer geworfen und ignoriert.
Wenn sich in keinem der zulässigen Bereiche Pixel befinden, erhält das Programm unabhängig vom Systemfarbschema eine hellblaue Überlagerung. (Siehe Eingabeaufforderung.) Wenn ein Programm kein Symbol hat, wird eine weiß / durchscheinende Überlagerung angezeigt, obwohl das Windows-Standardsymbol andernfalls eine blaue oder grüne Überlagerung erzeugen würde.
Es gibt nichts, was mehrere Programme daran hindert, dieselbe Markierungsfarbe zu haben. Das neueste Chrome-Symbol wird beispielsweise genauso gelb wie der Windows 8-Explorer.
Wenn es Bindungen gibt, gibt es eine vorgegebene Reihenfolge, die nicht von der Reihenfolge der Farben im Bild abhängt. Dies ist wahrscheinlich nur eine Folge der Art und Weise, wie das Maximum gefunden wird - Eimer, die früher überprüft wurden, bleiben weiterhin das Maximum, selbst wenn ein späterer bindet. Es scheint, dass Gelb einer der ersten überprüften Eimer ist.
Sobald der Gewinner gefunden wurde, scheint die Hervorhebungsfarbe auf eine Farbe in der Mitte des Bereichs des Eimers eingestellt zu sein.
Testfälle (Zahlen sind RGB-Werte):
(255, 247, 209) → Standardmarkierung
(47, 0, 0) → Standardmarkierung
(60, 0, 0) → Dunkelrot
(66, 0, 0) → Dunkelrot
(165, 0, 0) → Rot
( 128, 128, 128) → Standardmarkierung
(0, 148, 255) und (255, 0, 0) → Rot
(0, 255, 0) und (255, 216, 0) mit gleichem Bereich → Gelb
gleich, aber gespiegelt → Gelb
(255, 180, 180) → Hellrot
(255, 210, 210) → Standard-Hervorhebung
Reines Blau, Reines Gelb, Reines Rot und Reines Grün mit derselben Fläche → Gelb
(255, 61, 61) → Rot
(82, 0, 0) → dunkelrot
quelle
Ich würde sagen, dass Sie für jede Farbe, beginnend von oben, die R-, G- und B-Werte erhalten und von diesen den höchsten und niedrigsten der drei Werte nehmen und vergleichen. Die Farbe mit der größten Lücke zwischen der höchsten und der niedrigsten Farbe ist die hellste Farbe im Bild. Im Fall des Chrome-Symbols gibt es möglicherweise mehrere Farben für die größte Lücke, aber das Rot befindet sich oben, sodass es zuerst angetroffen wird. Daher dominiert dies für dieses Bild. (Ich nehme an, Sie können dies testen, indem Sie Ihr eigenes Symbol entwerfen, z. B. das Chrome-Logo um 120 Grad drehen und prüfen, ob stattdessen das Grün oder Gelb dominiert.)
quelle
So wie ich es verstehe - Das Betriebssystem berücksichtigt nicht nur einige Faktoren bei der Bestimmung der Farbe.
Dies kann sehr gut falsch sein und ist meistens eine Spekulation, aber dies gibt Ihnen eine leicht verständliche Methode, die das Betriebssystem sehr gut verwenden könnte, um die Farben zu bestimmen. Außerdem wird erläutert, wie ein Programm ohne vordefinierte Farbe und ein Symbol mit gleichen Farbmengen nicht weiß / braun / schwarz zugewiesen wird und warum Schwarz, Weiß und Grau niemals zugewiesen werden. Außerdem sollten Sie beachten, dass Programme, die kein Icon haben (es gibt noch welche), eine transparente Hot-Tracking-Farbe aufweisen, wodurch das Icon einfach "heller" wird, wenn Sie den Mauszeiger darüber halten.
quelle
Hier ist ein VB-Code, der die RGB-Farben eines Bildes mittelt:
Es ist nicht wirklich für die Verwendung in einem Betriebssystem optimiert, aber es sollte Ihnen eine grundlegende Idee geben - Source
quelle