1

我正在尝试在 RGB 和 HSV 之间执行颜色转换并返回到 RGB。它适用于我正在创建的 HSV 颜色选择器程序。我检索 HSV 组件。我想严格为我的颜色设置新的饱和度,因此将饱和度值设置为等于请求的值。然后我将它转换回RGB。但是,色调的值发生了变化,我没有要求它。此外,如果我不断移动饱和度滑块,色调最终会与青色、黄色或洋红色对齐,它们的色调分别为 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

4

1 回答 1

1

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

于 2012-04-21T09:18:32.367 回答