Android Color Conversion问题

时间:2012-04-21 07:35:09

标签: android colors rgb color-picker hsv

我正在尝试在RGB和HSV之间执行颜色转换并返回RGB。这是我正在创建的HSV颜色选择器程序。我检索HSV组件。我想严格按照我的颜色设置新的饱和度,因此将饱和度值设置为等于请求的值。然后我将它转换回RGB。然而,Hue的价值已经改变,我没有要求它。此外,如果我不断移动我的饱和度滑块,色调最终会将颜色与青色,黄色或洋红色对齐,颜色为60,180和300.设置饱和度时是否有一种方法可以使色调不变化?

注意:getHue,getSaturation和getValue正在检索colorCode的HSV组件

public void setSaturation(float s)
{
    float hsv[];
    hsv = new float[3];
    Log.i("Before change",String.valueOf("H: "+getHue()+" S: "+getSaturation()+" V: "+getValue()));
    Color.RGBToHSV(getRed(), getGreen(), getBlue(), hsv);
    hsv[1] = s;
    colorCode = Color.HSVToColor(hsv);
    Log.i("After change",String.valueOf("H: "+getHue()+" S: "+getSaturation()+" V: "+getValue()));
}

变更前(21558):H:28.771929 S:0.67058825 V:1.0

变更后(21558):H:28.928572 S:0.65882355 V:1.0

1 个答案:

答案 0 :(得分:1)

从rgb到hsv的转换是非线性的,浮点精度不够高,无法实现无损转换。 Here您可以找到无损的基于整数的转换解决方案。它的c ++但应该很容易转换为java。