我知道这可能是一个重复的问题。 Ruby, 生成随机十六进制颜色
我的问题略有不同。 我需要知道如何仅生成随机十六进制浅色,而不是深色。
在这个帖子中,颜色亮度的计算公式为
(0.2126*r) + (0.7152*g) + (0.0722*b)
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的算术平均值得出的。请注意,亮度更加主观,因为在不同的环境下,给定的目标亮度可能会引起不同的亮度感知(特别是周围的颜色会影响您的感知)。
总之,这取决于您认为哪些颜色是“浅色”的。
--我发现在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))
我修改了链接问题中的一个答案(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
所有颜色的r、g、b值均大于0x7f
color = (0..2).map{"%0x" % (rand * 0x80 + 0x80)}.join
ColorGenerator.new(saturation: 0.75, lightness: 0.5).create_hex
L(亮度)> 0.5
。因此,亮度有一个官方定义,但它与 RGB 没有直接关系。 - Alin Purcaru