android颜色类 - 奇怪的行为,内部舍入错误?

时间:2014-01-06 14:32:40

标签: java android colors internal

我有一个像0x8833aacc一样的简单颜色 如果我现在使用Color.colorToHSV创建它的HSV值,
然后使用Color.HSVToColor来获取int,它略有不同!
the red value decreases by 1

但它不是每次都这样做,例如当使用0x8830aacc时,为什么呢?为什么? 我的示例代码显示了这个:

final float[] current_hsv = new float[3];
float current_alpha = 1.0f;

private int GetColor()
{
    return Color.HSVToColor((int)(current_alpha * 255.0f), current_hsv);
}

private void SetColor(int color)
{
    Color.colorToHSV(color, current_hsv);
    current_alpha = (float)Color.alpha(color) / 255.0f;
}

private void Test()
{
    int color = 0x8833aacc;
    SetColor(color);
    int g = GetColor();

    //convert to hex, you'll see the red value decreased by 1!!!
    Log.i("Test", "color: " + String.format("%08x", color) + " got color: " + String.format("%08x", g));
}

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

自己修理:
在机器人Color.colorToHSVColor.HSVToColor内有一个明确的错误 我现在正在使用oracles HSBToRGBRGBToHSB实现,
他们没有这个问题。

(对于那些不知道的人:HSB是[色调] [饱和度] [亮度]
并且[亮度]与HSV的[值]相同 - 所以没有区别)
现在一切都很好:)