Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby,生成随机十六进制颜色(仅浅色)_Ruby_Random_Colors - Fatal编程技术网

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

Ruby,生成随机十六进制颜色(仅浅色),ruby,random,colors,Ruby,Random,Colors,我知道这可能是一个重复的问题。 我的问题略有不同。我需要知道,如何生成随机六边形光颜色只,而不是黑暗 彩色发光用以下公式描述: (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)} lu

我知道这可能是一个重复的问题。

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

彩色发光用以下公式描述:

(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的算术平均值。请注意,亮度更具主观性,因为给定的目标亮度可能会在不同的环境中引发不同的亮度感知。特别是,周围的颜色可能会影响您的感知


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

< P>所有的颜色,其中R,G,B都大于0x7f

color = (0..2).map{"%0x" % (rand * 0x80 + 0x80)}.join
只是一些提示:

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


这比生成所有组件都超过某个值(例如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))

我修改了链接问题中的一个答案,提出了一些非常灵活的排除深色的方法:

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

您可以更改楼层值以满足您的需要。较高的值将限制输出为较浅的颜色,较低的值将允许较深的颜色。

提供了一个非常好的解决方案,您可以调用:

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

你在什么地方划清了深色和浅色之间的界限?@Jonas为什么要用这个来解决问题?不,我不是用这个来画画的。我会在我的项目中显示浅色,但每次页面刷新时它都会显示不同的颜色。就像@Alin在下面写的,这取决于你如何定义浅色。也许是r,g,b的和至少应该是0xff,其中一个至少应该是0x80,也许是其他原因。@Jonas Elfström你将浅色定义为L亮度>0.5。所以对于亮度有一个官方定义,但它与RGB没有直接关系。所以,你想说FF0000不是光?还是FF7777?我认为RGB模型不适合这种情况。@Alin你说得对。这就是为什么答案是从你如何定义光开始的。我希望现在它更有意义,更精确一点。你的答案现在已经足够接近了。您可能需要添加一些链接到使用该公式定义亮度的原始源。它显示八个字母数字字符。但是,十六进制的颜色只有六个,对吗?。irbmain:001:0>color=0..3.map{%0x%rand*0x80+0x7f}.join=>e1ad8f97 irbmain:002:0>color=0..3.map{%0x%rand*0x80+0x7f}.join=>d28cf5fe irbmain:003:0>