Hallo liebe Javianer
Ich sitze schon seit ein paar Stunden an einem fiesen Problem. Es geht darum, dynamisch eine Farbe aus einem Wert zu berechnen.
Ich habe mich dafür entschieden, das HSB-codiert zu machen, damit ich später z.B. den Farbraum einschränken kann. Desweiteren ist HSB meiner Meinung nach einfacher zu handhaben, da ich nur den Hue verändern muss, während Brightness und Saturation unverändert bleiben können.
Daher habe ich mich gleich festgelegt: Ich möchte erreichen, dass die Farbe für den Wert 0 grün und für die Werte ±100 rot ist. (Andere Werte werden vorher abgefangen, es geht nur von -100 bis 100)
Dementsprechend soll ein Wert von 0 ein Hue von 120 erzeugen und 100 den Hue 0.
Dafür habe ich folgende Formel benutzt:
[java=67]float hueParameter = -1.2F * Math.abs(x) + 120F;[/code]
Dies gibt mir die gewünschten Hue-Werte in meinem definierten Rahmen.
Das Problem folgt in dieser Zeile
[java=68]Color c = Color.getHSBColor(hueParameter, 1, 1);[/code]
Wie man aus der API von getHSBColor lesen kann, wendet sie auf den Parameter Hue noch folgende Formeln an:
Das macht natürlich die von mir berechneten Werte völlig kaputt, da so der komplette Farbraum genutzt wird, was ich ja nicht möchte.
Die Frage ist nun, wie ich verhindern oder umgehen kann, dass er mir meine berechneten Hue-Werte kaputt macht.
Ich verzweifle so langsam daran, da ich mir fast sicher bin, dass es eine schöne einfache Lösung gibt, ich aber sie nicht finde.
Für alternative Vorschläge bin ich auch offen, Hauptsache die Möglichkeit der Farbraumeinschränkung bleibt bestehen.
Ich sitze schon seit ein paar Stunden an einem fiesen Problem. Es geht darum, dynamisch eine Farbe aus einem Wert zu berechnen.
Ich habe mich dafür entschieden, das HSB-codiert zu machen, damit ich später z.B. den Farbraum einschränken kann. Desweiteren ist HSB meiner Meinung nach einfacher zu handhaben, da ich nur den Hue verändern muss, während Brightness und Saturation unverändert bleiben können.
Daher habe ich mich gleich festgelegt: Ich möchte erreichen, dass die Farbe für den Wert 0 grün und für die Werte ±100 rot ist. (Andere Werte werden vorher abgefangen, es geht nur von -100 bis 100)
Dementsprechend soll ein Wert von 0 ein Hue von 120 erzeugen und 100 den Hue 0.
Dafür habe ich folgende Formel benutzt:
[java=67]float hueParameter = -1.2F * Math.abs(x) + 120F;[/code]
Dies gibt mir die gewünschten Hue-Werte in meinem definierten Rahmen.
Das Problem folgt in dieser Zeile
[java=68]Color c = Color.getHSBColor(hueParameter, 1, 1);[/code]
Wie man aus der API von getHSBColor lesen kann, wendet sie auf den Parameter Hue noch folgende Formeln an:
Java:
float hue = (hueParameter - (float)Math.Floor(hueParameter)) * 360F
Das macht natürlich die von mir berechneten Werte völlig kaputt, da so der komplette Farbraum genutzt wird, was ich ja nicht möchte.
Die Frage ist nun, wie ich verhindern oder umgehen kann, dass er mir meine berechneten Hue-Werte kaputt macht.
Ich verzweifle so langsam daran, da ich mir fast sicher bin, dass es eine schöne einfache Lösung gibt, ich aber sie nicht finde.
Für alternative Vorschläge bin ich auch offen, Hauptsache die Möglichkeit der Farbraumeinschränkung bleibt bestehen.
Zuletzt bearbeitet: