壁紙を作成しようとしていますが、「android.graphics.color」クラスでHSV変換を使用しています。特定の色相(0..360)のrgbカラー(整数)とHSVカラーへの逆変換で同じHSVカラーを変換しても同じ色相にならないことに気づいたときは非常に驚きました。これは私のコードです:AndroidでのHSV変換が不正確
int c = Color.HSVToColor(new float[] { 100f, 1, 1 });
float[] f = new float[3];
Color.colorToHSV(c, f);
alert(f[0]);
私は100度の色相で始まり、結果は99.76471です。 なぜ私の意見では、比較的大きな不正確さがあるのだろうかと思います。
しかし、もっと大きな問題は、コードにその値を再入力すると、新しい結果が再び減少することです。
私が99.76471で始まる場合、私は99.52941を取得します。これは私のための一種の問題です。 私はこれらの問題を抱えていなかった "java.awt.Color"クラスを使用して、javaで同様のことを行いました。残念ながら、私はアンドロイドでこのクラスを使用することはできません。
*これは、16と32ビットの整数の間で使用される異なる変換の場合ですが、これはオフになる可能性があります。私は何年か前に、サウンドファイルとバイト配列からの変換に問題があることを覚えています。最後に、図を最も近い整数に丸めました。 – dave
私はdaveのアイデアを支持しています。便利なことは、元の値100と99.76471の丸められた結果の差が60/255で、255 = 2^8-1(8ビットにrgb値を格納するのが一般的です) 。 99.76471と99.52941についても同様です。私は完全な理論を持っていませんが、基本的な算術演算が間違っているようです。 – elias