Ruby,生成随机的十六进制颜色(仅浅色)

时间:2011-05-31 12:43:13

标签: ruby random colors

我知道这可能是重复的问题。 Ruby, Generate a random hex color

我的问题略有不同。我需要知道,如何只生成随机六角光,而不是黑暗。

6 个答案:

答案 0 :(得分:7)

In this thread颜色发光用公式

描述
(0.2126*r) + (0.7152*g) + (0.0722*b)

亮度的相同公式为given in wikipedia(取自this publication)。它反映了人类的感知,绿色是最“密集”的,蓝色是最少的。

因此,您可以选择r,g,b,直到亮度值高于 dark (255到0)之间的分度。例如:

lum, ary = 0, []
while lum < 128
 ary = (1..3).collect {rand(256)}
 lum = ary[0]*0.2126 + ary[1]*0.7152 + ary[2]*0.0722
end

Another article指亮度,即r,g和b的算术平均值。请注意,亮度更加主观,因为给定的目标亮度可以在不同的上下文中引出不同的亮度感知(特别是周围的颜色会影响您的感知)。

总而言之,这取决于你认为“光”的颜色。

答案 1 :(得分:2)

只是一些指示:

使用HSL并随机生成各个值,但将L保持在您选择的时间间隔内。然后convert to RGB,如果需要的话。

比使用超过某个值(例如0x7f)的所有组件生成RGB要困难一点,但如果您希望颜色均匀分布,这就是要做的事情。

答案 2 :(得分:2)

- 我发现128到256的颜色更浅

    Dim rand As New Random
    Dim col As Color
    col = Color.FromArgb(rand.Next(128, 256), rand.Next(128, 256), rand.Next(128, 256))

答案 3 :(得分:1)

r,g,b各自大于0x7f的所有颜色

color = (0..2).map{"%0x" % (rand * 0x80 + 0x80)}.join

答案 4 :(得分:0)

我修改了链接问题(Daniel Spiewak's answer)中的一个答案,以便在排除较暗颜色方面提出一些非常灵活的方法:

floor = 22 # meaning darkest possible color is #222222
r = (rand(256-floor) + floor).to_s 16
g = (rand(256-floor) + floor).to_s 16
b = (rand(256-floor) + floor).to_s 16

[r,g,b].map {|h| h.rjust 2, '0'}.join

您可以更改floor值以满足您的需求。较高的值会将输出限制为较浅的颜色,较低的值会允许较暗的颜色。

答案 5 :(得分:0)

color-generator gem提供了一个非常好的解决方案,您可以在其中致电:

ColorGenerator.new(saturation: 0.75, lightness: 0.5).create_hex