Android中的HSVToColor有点奇怪

时间:2011-09-16 12:30:10

标签: java android

这是我的代码,它应该采用颜色int,将其转换为HSV,将0.5添加到hue并转换回int。但是在输出中,而不是0xFF00FFFF给出-64768 ...任何想法可能是什么问题?

    int c = 0xFFFF0000;   /// RED
    float[] hsv = new float[3];
    Color.colorToHSV( c, hsv ); /// splitting "c" into hsv
    hsv[0] = hsv[0]+0.5f;  /// adding 0.5 to Hue
    int c1 = Color.HSVToColor( hsv ); /// converting hsv back to int 
    Log.e("color: ", String.valueOf(c1) ); /// outputting new color int
    // should be "0xFF00FFFF" (light bule) , but is  "-64768" hmm...

谢谢!

2 个答案:

答案 0 :(得分:1)

您不是以十六进制打印字符串。 而是打印原始int值。

十六进制的值是FFFF0300,这是有道理的。

答案 1 :(得分:0)

我使用以下代码以十六进制字符串格式打印颜色,具有固定大小(颜色分量为2个字符)。


public abstract class ColorHelper {

    public static String toARGBString(int color) {
        String ret;

        ret = "#";
        ret += fix(Integer.toHexString(Color.alpha(color)));
        ret += fix(Integer.toHexString(Color.red(color)));
        ret += fix(Integer.toHexString(Color.green(color)));
        ret += fix(Integer.toHexString(Color.blue(color)));

        return ret.toUpperCase();
    }

    private static String fix(String input) {
        if (input.length() == 1) {
            return "0" + input;
        }

        return input;
    }
}