2012-04-21 156 views
1

我试图执行RGB和HSV之间的颜色转换并返回RGB。这是一个我正在创建的HSV颜色选择器程序。我检索HSV组件。我想严格按照我的颜色设置新的饱和度,因此请将饱和度值设置为等于所请求的值。然后我将它转换回RGB。然而,色相的价值已经改变,我没有要求。此外,如果我不断移动我的饱和度滑块,色调最终会将颜色与青色,黄色或品红色相匹配,色调为60,180和300.有没有办法在设置饱和度时不改变色调?Android颜色转换问题

注: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五:1.0

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

回答

1

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