System.Media.Colors nach Position im sichtbaren Spektrum sortieren

8

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?

    
NVM 25.03.2011, 09:10
quelle

1 Antwort

4

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:

  • Sie können den Farbton manuell berechnen. Das ist nicht wirklich schwer, aber es ist chaotisch: viele Wenn-Dann-Aussagen. Beispielcode für diese finden Sie auf devx . Das ist mehr Arbeit und weniger lesbar, aber wahrscheinlich die schnellere Option.
  • Sie können 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.

    
Eamon Nerbonne 25.03.2011, 09:54
quelle

Tags und Links