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