2017-08-02 4 views
1

Ich habe Code, der RGB-Werte in HSL-Werte sowie HSL in RGB konvertiert. Es funktioniert gut, aber ich habe eine Farbauswahl, die entweder in RGB oder HSL funktionieren kann. Das Problem ist, dass beide ganzzahlige Werte verwenden.Wie werden RGB- und HSL-Integer-Werte beim Konvertieren von Daten beibehalten?

Also, wenn ich RGB in HSL umwandeln, bekomme ich Brüche, die abgerundet werden müssen. Wenn ich wieder in RGB umwandle, sind die Werte nicht die gleichen wie sie waren - eine Zahl ist normalerweise eins (ein Wert von 123 könnte 124 werden, nachdem RGB> HSL> RGB) gegangen ist.

Ich finde diese ungerade, weil sie in Photoshop die gleiche Farbauswahl haben - Sie können zwischen RGB und HSB wählen, und wenn Sie hin und her konvertieren, bleiben die RGB-Werte konsistent und sie verwenden ganzzahlige Werte, wenn Sie beide auswählen Modi. Wie erreichen sie das?

+0

Ich würde vorschlagen, RGB * und * HSL-Werte sowie ein Flag zu speichern, um anzuzeigen, welche aktiv ist. Sonst wäre es unmöglich, die Konsistenz aufrechtzuerhalten. (Zum Beispiel sind bei einem Sättigungswert von Null alle Farbtonwerte gleichwertig.) –

+0

Ja, das mache ich - aber das Problem tritt auf, wenn ich die Picker-Modi wechseln will. Die Werte ändern sich, weil die Brüche ganze Zahlen werden. Ich möchte keine Brüche im Picker angeben müssen. Also frage ich mich, wie man diese Brüche versteckt hält, aber immer noch in der Lage ist, dieselben Werte auszuwählen und zu konvertieren, wie Sie es in der Vergangenheit ausgewählt haben. Photoshop macht das irgendwie. – user3591153

+1

Wie geht es weiter mit den RGB-Werten, wenn der Benutzer zu HSL wechselt und nur HSL-Werte verwendet, wenn der Benutzer den Farbauswahlcursor im HSL-Dialog bewegt? –

Antwort

1

Die Farbräume haben nicht die gleiche Größe für ganzzahlige Werte.

HSL hat Schwarz (Helligkeit null), plus Weiß (Helligkeit 100), plus 359 * 100 * 98 andere Farben (da Farbton Null das gleiche wie Farbton 360 ist), was 3.518.202 Ganzzahl-Tripel ergibt.

RGB verfügt über 256 * 256 * 256 oder 16.777.216 ganze Zahl verdreifacht, so dass mehrere RGB-Werte auf den gleichen HSL-Wert abbilden können - in der Ration von etwa 4,7 bis 1.

Konsistenz zu erhalten, wenn Sie Picker-Modus ändern Möglicherweise müssen HSL-Werte intern als Gleitkommawerte beibehalten werden, aber in der Auswahl werden Ganzzahlwerte angezeigt. Auch die interne Verwaltung von RGB-Werten als Fließkomma kann hilfreich sein.

Ein weiteres Problem in der Farbe I Software gesehen habe, ist zu runden RGB Werten von HSL zu RGB Umwandlung in der nächsten ganzen Zahl im Bereich von 0 bis 255 erhielten halte ich dies als problematisch, weil sie die RGB-Wert von 1 bis 254 bedeuten, enthalten 1/255 des Bereichs, während Null und 255 nur die Hälfte von 1/255 des Bereichs erhalten. Die Alternative, die ich vorzog, bestand darin, Fließkomma-RGB-Komponentenwerte von 256 bis 255 (oder 255.99999, falls gewünscht) zuzuordnen und den ganzzahligen Boden der resultierenden Farbkomponente zu nehmen. Auf diese Weise erhalten ganzzahlige Komponentenwerte von 0 bis 255 jeweils 1/25 des Bereichs.

Wenn Sie am Ende des Tages möchten, dass Benutzer einen zuvor verwendeten HSL-Wert eingeben können und dieselbe Farbe erhalten, müssen Sie HSL-Werte mit Dezimalstellen zulassen.