安卓颜色转换问题

标签 android colors rgb color-picker hsv

我正在尝试在 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/

相关文章:

c# - 无法更改 Xamarin 表单中 CollectionView 内框架的背景颜色

java - 错误: incompatible types: Message cannot be converted to int?

Java颜色检测

python - 将整数转换为 RGB 值并使用 Python 返回

java - 如何在 indesign 中以编程方式将 CMYK 转换为 RGB

java - 设置列表项被点击时的背景颜色

android - onCreate 之前的 Activity 无法使用系统服务?

swift - vImageBoxConvolve_ARGB8888 背景颜色参数

java - 相交形成闭合形状的多条绘图线的填充颜色

ios - HSV 颜色范围表