我知道这可能是重复的问题。 Ruby, Generate a random hex color
我的问题略有不同。我需要知道,如何只生成随机六角光,而不是黑暗。
答案 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