Ruby, генерировать случайный шестнадцатеричный цвет (только светлые цвета) - PullRequest
2 голосов
/ 31 мая 2011

Я знаю, что это возможно дублированный вопрос. Ruby, сгенерировать случайный гекс цвет

Мой вопрос немного другой.Мне нужно знать, как генерировать только случайные шестнадцатеричные светлые цвета, а не темные.

Ответы [ 5 ]

7 голосов
/ 31 мая 2011

В этой теме цветовая яркость описывается формулой

(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. Обратите внимание, что яркость еще более субъективна, так как данная заданная яркость может вызывать различные восприятия яркости в разных контекстах (в частности, окружающие цвета могут влиять на ваше восприятие).

В общем, все зависит от того, какие цвета вы считаете "светлыми".

2 голосов
/ 22 ноября 2012

- я обнаружил, что от 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))
2 голосов
/ 31 мая 2011

Только некоторые указатели:

Используйте HSL и генерируйте отдельные значения случайным образом, но сохраняя L в выбранном вами интервале.Затем преобразуйте в RGB , если необходимо.

Это немного сложнее, чем генерировать RGB со всеми компонентами с определенным значением (скажем, 0x7f), но это путь, если вы хотитецвета распределены равномерно.

1 голос
/ 31 мая 2011

Все цвета, где каждый из r, g, b больше 0x7f

color = (0..2).map{"%0x" % (rand * 0x80 + 0x80)}.join
0 голосов
/ 27 мая 2018

Я изменил один из ответов из связанного вопроса ( Ответ Даниэля Спевака ), чтобы придумать что-то довольно гибкое с точки зрения исключения более темных цветов:

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 в соответствии с вашими потребностями.Более высокое значение ограничит вывод более светлыми цветами, а более низкое - более темными.

...