线性增加颜色暗度算法

时间:2009-08-28 20:20:59

标签: css algorithm function colors hex

我想在ruby中编写一个函数,给出1到500之间的数字将输出一个6位十六进制颜色代码,对于更高的数字,它会线性变暗。这似乎并不难,但我不知道从哪里开始。我该如何实现呢?

修改

Hue似乎是一种更可靠的方式。我想给出一个参考颜色,比如一个绿色的阴影,然后根据输入的数字变暗或变亮。

输入:10
输出:颜色代码(在rgb或HSV中),是参考颜色的浅色

输入:400
输出:颜色代码(在rgb或HSV中),它是参考颜色的相当深的色调

编辑2

我需要在1到500之间使用的唯一原因是因为这是我必须使用的输入。如果一些靠近在一起的数字映射到相同的颜色,那就没关系。

4 个答案:

答案 0 :(得分:3)

6位十六进制颜色代码为RGB。 你想要的是在HSV中工作:选择一个色调和饱和度,然后逐渐减少值。 从HSV转换为RGB以输出颜色。 有关示例,请参阅here

答案 1 :(得分:2)

基本线性插值?

// Pseudocode
function fade_colour(source, factor)
    const max = 500
    const min = 1

    foreach component in source
        output[component] = round(source[component] * (max - value) / (max - min))
    endforeach

    return output
endfunction

答案 2 :(得分:1)

为什么不返回灰度级,然后#ffffff返回#000000?无论如何,500级黑暗无法真正区分,灰色可以提供256级。

答案 3 :(得分:1)

如果您只想让参考颜色变暗,那就很容易了。给定R,G,B颜色是你想要的最亮的颜色,将3个值中的每一个乘以(500-输入)并除以499.将每个值转换为2个十六进制数字并用#as附加它们前面。