Ich versuche ein Hintergrundbild zu erstellen und verwende die HSV-Konvertierung in der Klasse "android.graphics.color". Ich war sehr überrascht, als mir klar wurde, dass eine Konvertierung einer erstellten HSV-Farbe mit einem bestimmten Farbton (0..360) in eine RGB-Farbe (eine Ganzzahl) und eine Rückkonvertierung in eine HSV-Farbe nicht den gleichen Farbton ergibt. Das ist mein Code:Ungenaue HSV-Konvertierung unter Android
int c = Color.HSVToColor(new float[] { 100f, 1, 1 });
float[] f = new float[3];
Color.colorToHSV(c, f);
alert(f[0]);
Ich beginne mit einem Farbton von 100 Grad und das Ergebnis ist 99.76471. Ich frage mich, warum es (meiner Meinung nach) eine relativ große Ungenauigkeit gibt.
Aber ein viel größeres Problem ist, dass wenn Sie diesen Wert erneut in den Code eingeben, das neue Ergebnis wieder abnimmt.
Wenn ich mit 99.76471 beginne, bekomme ich 99.52941. Das ist ein Problem für mich. Ich habe etwas ähnliches in Java mit der "java.awt.Color" -Klasse, wo ich diese Probleme nicht hatte. Leider kann ich diese Klasse nicht in Android verwenden.
Ich * glaube * Dies ist ein Fall einer anderen Konvertierung zwischen einer 16 und 32-Bit-Ganzzahl verwendet, aber das kann weg sein. Ich erinnere mich, dass ich vor Jahren ein Problem mit Sounddateien und der Konvertierung von einem Byte-Array hatte. Am Ende rundete ich die Figur auf das nächste ganze int. – dave
Ich unterstütze die Idee von dave. Eine Sache, die nützlich sein könnte, ist zu bemerken, dass der Unterschied zwischen dem ursprünglichen Wert von 100 und dem gerundeten Ergebnis von 99.76471 60/255 ist, und 255 = 2^8-1 (Es ist ziemlich üblich, rgb-Werte auf 8 Bits zu speichern) . Das gleiche gilt für 99.76471 und 99.52941. Ich habe keine vollständige Theorie, aber es scheint, als wäre die grundlegende Arithmetik falsch gelaufen. – elias