将RGB值转换为色轮坐标

时间:2018-06-12 14:18:42

标签: android math colors

我有一张来自谷歌的色轮图片,现在我想找到一种方法以某种方式计算色轮中任何rgb颜色的x和y坐标。 如果这有点令人困惑我试着解释它好一点: 我有一张色轮图片 - 就像你在paint.net中选择一种颜色一样。我也有rgb值的颜色。现在我想获得具有该颜色的图片的x和y坐标。 但是,我不知道如何做到这一点。我试图在使用MIT App Inventor 2创建的应用程序中使用它,这限制了我的能力。所以最好的事情是数学解决方案。 我希望有人可以帮助我。

编辑:所以在这里你有我正在使用的图片。我其实一直希望在这里有这个,但忘记了......

enter image description here

1 个答案:

答案 0 :(得分:2)

我正在尝试在iOS应用using CIFilter中实现颜色选择器,并且不得不解决相同的问题。

我发现给定颜色映射的HSV值与该色轮非常吻合:

  • hue是围绕车轮的角度。 0或1是0或2pi弧度,0.75是pi / 2,0.5是pi,依此类推。基本上,它从1到0绕着圆圈从最右端开始顺时针旋转。
  • saturation是您从圆心到边缘的距离,以半径的百分比表示。中间为0,边缘为1。
  • value是颜色的暗淡(我在上面链接的帖子中的inputValue)。

因此,对于给定的颜色,给定huesaturation,请参见以下伪代码:

float pickerWidth = myPickerImage.size.width;
float radius = pickerWidth / 2;
float colorRadius = saturation * radius;
float angle = (1 - hue) * (2 * pi);
float midX = myPicker.size.width / 2; //midpoint of the circle
float midY = myPicker.size.height / 2;
float xOffset = cos(angle) * colorRadius; //offset from the midpoint of the circle
float yOffset = sin(angle) * colorRadius;
Point colorPoint = new Point(midX + xOffset, midY + yOffset);

value参数将用于实现“黑暗度”滑块。

您需要将RGB转换为HSV-UIColor自动为我完成此操作,但我敢肯定,也有一种方法可以在Android上完成。