Javascript算法/函数,用于生成沿可见光谱的颜色的RGB值

时间:2015-09-09 03:43:52

标签: javascript algorithm colors

我正在寻找一种Javascript函数/算法,它将为“可见光”光谱中的p%颜色生成RGB值。

例如 - 给定可见光谱......

enter image description here

...并且给定p = 0,该函数应该返回红色RGB(该频谱为0%。给定p = 50,该函数应该大致返回绿色的RBG(整个频谱为50%)。 ,如果p = 100,函数将返回紫罗兰的RBG。

该功能不需要在技术上/科学上精确 - 我只是在寻找一个合理的近似值,具有合理的灵敏度。 (例如,p = 76的RGB应该与p = 77的不同)。

理想情况下,我正在寻找一个纯粹的数学公式。即,我想避免将下面的图像实际加载到Canvas上,而不是使用context.getImageData来查找图像上p%像素的颜色。

当然,我不知道这是否可能......

2 个答案:

答案 0 :(得分:0)

您可以使用此库https://github.com/moagrius/Color设置颜色并更改色调(https://en.wikipedia.org/wiki/Hue)。

示例:

var color = new Color('#FF0000'); // red
color.hue(150);
color.getRGB(); // rgb(0, 255, 128) cerulean
color.hue(300);
color.getRGB(); // rgb(255, 0, 255) violet
color.hue(0);
color.getRGB(); // rgb(255, 0, 0) red

答案 1 :(得分:0)

  

理想情况下,我正在寻找纯粹的数学公式。即,我想避免   实际上将下面的图像加载到Canvas上,而不是使用   context.getImageData用于查找图像上p%像素的颜色。

可见光光谱不能放入公式中,因为我们在特定波长下看到的颜色并不遵循数学术语。人眼和大脑太复杂了!

是的,您可以使用红色,绿色和蓝色灯泡(如PC屏幕)显示每种颜色。但这并不意味着黄色,青色和洋红色将光谱分成准确的三分之一!然而,在计算机科学中,这很容易被认为是真实的。

Computer screen at a closer look

这样可以轻松计算颜色:

Color       hue [°]     r  g  b     hex
------------------------------------------
red         0           1  0  0     FF0000
yellow      60          1  1  0     FFFF00
green       120         0  1  0     00FF00
cyan        180         0  1  1     00FFFF
blue        240         0  0  1     0000FF
magenta     300         1  0  1     FF00FF

您可以在滚轮上显示颜色:左侧是程序员喜欢的颜色,右侧更像是可见光谱:

enter image description here

现在,您可以轻松了解为什么如果您想使用可见光谱,无法计算rgb值:它不遵循任何规则。除此之外,不仅仅有一个可见光谱:Google it,你会发现每个图像都略有不同。

我想了解获取特定光波长的rgb值的具体原因:您可以将色调用作other answers suggest但请注意,色调的比例与可见光谱的比例不同。

如果实际比例很重要,则必须将图像加载到画布中(图像高度为1像素就足够了;))或者您可以将所有值存储在JSON数组中。