我需要为待办事项列表中的多个项目随机生成颜色。
(比如从学校接孩子,拿干洗等等)
在红宝石中做到这一点的最佳方法是什么,还要避免难以看到的颜色(如灰色,白色等)?
答案 0 :(得分:5)
使用RGB,您将更难以避免灰色,以及“难以看清”的颜色(我猜是在白色背景上)
如果您需要它们是随机的,您可以使用HSV values远离白色,灰色和黑色光谱。这意味着你可以在值和饱和度参数中设置一个范围(例如,~175到255),同时可以随意自由选择色调。
所以,这可能有效:
def random_bright_color(threshold = 175)
hue = rand(256 - threshold) + threshold
saturation = rand(256 - threshold) + threshold
value = rand(256)
hsv_to_rgb(hue, saturation, value)
end
,其中
def hsv_to_rgb(h, s, v)
if s == 0
r = g = b = (v * 2.55).round
else
h /= 60.0
s /= 100.0
v /= 100.0
i = h.floor
f = h - i
p = v * (1 - s)
q = v * (1 - s * f)
t = v * (1 - s * (1 - f))
rgb = case i
when 0 then [v, t, p]
when 1 then [q, v, p]
when 2 then [q, v, t]
when 3 then [p, q, v]
when 4 then [t, p, v]
else [v, p, q]
end
end
rgb.map{|color| (color * 255).round}
end
从here移植,解释可以在同一篇维基百科文章中找到
但是,如果你还需要随机颜色彼此不同,也许最真实的解决方案是从一组基色中选择它们,然后从该组中随机选择。
答案 1 :(得分:0)
要生成RGB格式的随机颜色,您只需要随机生成三个组件中的每一个(如rand(256)
三次)。
如果你不希望颜色太亮,有很多方法可以确保颜色。例如,允许每个组件仅为其正常范围的一半(rand(128)
)。由于较大的数字表示较亮的颜色,因此您不会得到白色,米色或任何其他“难以看见”的颜色。
您还可以要求所有组件的总和足够小或发明一些其他指标。例如,here您可以找到更准确的“亮度”公式。
但是如果你只需要有限数量的颜色(比如10或16),最好只准备清单(蓝色,绿色,橙色,栗色,紫罗兰色等)并从中选择颜色。
答案 2 :(得分:0)
您需要多少种不同的颜色?
由于难以随机生成合适的颜色,请预先选择修复palette of colors,然后您可以随机选择。