Ruby,生成随机的hex颜色(仅浅色)

我知道这可能是重复的问题。 Ruby,生成随机的hex颜色

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

在该线程中,使用公式来描述发光度

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

维基百科中给出了相同的亮度公式(并且取自本出版物 )。 它反映了人类的感知,绿色是最“密集”的,蓝色是最少的。

因此,您可以选择r,g,b,直到亮度值高于明暗之间的分度(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 

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

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

只是一些指示:

使用HSL并随机生成单个值,但将L保持在您选择的区间内。 然后根据需要转换为RGB 。

它比使用超过某个值(例如0x7f)的所有组件生成RGB要困难一些,但如果您希望颜色均匀分布,则可以采用这种方法。

– 我发现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)) 

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

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

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

 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值以满足您的需求。 较高的值会将输出限制为较浅的颜色,较低的值将允许较暗的颜色。