我正在尝试在 RGB 和 HSV 之间执行颜色转换并返回到 RGB。它适用于我正在创建的 HSV 颜色选择器程序。我检索 HSV 组件。我想为我的颜色严格设置新的饱和度,所以将饱和度值设置为等于请求的值。然后我将它转换回 RGB。但是Hue的值变了,我没有要求。此外,如果我不断移动我的饱和度 slider ,色调最终会将颜色与青色、黄色或品红色对齐,它们的色调为 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
最佳答案
从 rgb 到 hsv 的转换是非线性的,浮点精度不够高,无法进行无损转换。 Here您可以找到一个无损的基于整数的转换解决方案。它是 C++,但应该很容易转换为 Java。
关于安卓颜色转换问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10257175/