Was ist der schnellste / einfachste Weg, um die Farben in der System.Media.Colors nach ihrer Position im sichtbaren Spektrum zu sortieren (Rot zu Blau oder Blau zu Rot spielt keine Rolle)?
BEARBEITEN:
Hier ist das Ergebnis der Sortierung (hue- & gt; Sättigung- & gt; Helligkeit):
Dies ist wahrscheinlich technisch korrekt, aber visuell ist es immer noch nicht. Kann jemand Licht auf das Problem werfen?
Sie möchten Farben nach Farbton sortieren, so scheint es. Um dies zu tun, müssen Sie den Farbton einer Farbe berechnen, und das Wpf System.Media.Color
struct enthält keine Eigenschaften, die das für Sie tun.
Sie haben zwei Möglichkeiten:
System.Drawing.Color.GetHue
verwenden. Die ältere Winforms-Ära System.Drawing
Farbstruktur unterstützt die Berechnung des Farbtons. Das macht den Code wirklich einfach. etwas wie System.Drawing.Color.FromArgb(col.R, col.G, col.B).GetHue()
wird ausreichen - nett und kurz! Es bedeutet jedoch, dass Sie sich mit zwei Strukturen mit identischen Namen befassen, und Sie müssen natürlich auf die Assembly System.Drawing.dll
verweisen. Diese Art von Methoden tendieren dazu, langsam zu sein und eine Vielzahl von Plausibilitätsprüfungen durchzuführen. Wenn Leistung kritisch ist, ist dies wahrscheinlich weniger attraktiv. Der Farbraum ist dreidimensional. Obwohl Sie nach einer Richtung sortieren können (z. B. dem Farbton hier), wird die resultierende Farbfolge nur dann kontinuierlich angezeigt, wenn Sie die anderen beiden Richtungen (Sättigung und Helligkeit im HSB-Modell) konstant halten. Das ist der Grund, warum die meisten Farbwähler eine zweidimensionale Darstellung wählen, aber selbst dann müssen Sie eine Dimension konstant innerhalb eines bestimmten Farbwählers belassen, um einen kontinuierlichen Farbverlauf beizubehalten.
Tags und Links wpf .net c# colors color-space