我有一个像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));
}
我该如何解决这个问题?
答案 0 :(得分:0)
自己修理:
在机器人Color.colorToHSV
或Color.HSVToColor
内有一个明确的错误
我现在正在使用oracles HSBToRGB
和RGBToHSB
实现,
他们没有这个问题。
(对于那些不知道的人:HSB是[色调] [饱和度] [亮度]
并且[亮度]与HSV的[值]相同 - 所以没有区别)
现在一切都很好:)