【问题标题】:Android Color Conversion issueAndroid颜色转换问题
【发布时间】:2012-04-21 07:35:09
【问题描述】:

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

【问题讨论】:

    标签: android colors rgb color-picker hsv


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2011-10-28
      • 2012-08-25
      • 2019-01-05
      • 1970-01-01
      • 2011-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多