![]() |
Нахождение близости цвета к белому/черному
Вложений: 1
Добрый день.
Возникла такая задача: необходимо надписать цветной сплошно закрашенный объект белым/черным цветом в зависимости от темноты закраски, таким образом, чтоб надпись была хорошо читаема. То есть например, синий надо подписать белым, а желтый черным. В противном случае надпись не будет различима. Проблема состоит в том, как определить является ли объект светлым или темным. Изначально пробовал перевести в hsl (нормированную) и посмотреть его светлость (l). Но таким способом получается, что его светлость равна 0.5 для всех комбинаций содержащей одну или две единицы (в rgb). То есть желтый и синий одинаково близки к черному, что не так. Что-то я не делаю не так, но не понимаю что. Вопрос в том, как же решить данную задачу? Заранее благодарен. |
А если посмотреть в сторону RGB цвета? однозначно ведь будет понятно, что 255,255,255 - это белый, а 0,0,0 - черный. И в зависимости от чисел вывести закономерность и печатать?
|
|
Как вариант что-нибудь типа
(11*R+30*G+59*B)/100 и посмотреть, к чему ближе результат. |
вы знаете - желтый (255.255.0) имеет HSL (60.100.100), синий (0.0.255) имеет HSL (240.100.100) и это значит что они одинаково далеки как от белого так и черного.
а разные они потому что желтый и синий сами по себе ближе и дальше от черного как цвет, не осветленный и не затемненный. Вот тут на рисуночке это очень хорошо показано - там внешний круг - цвета, внутренний - отношение к черному. как определить точное отношение цвета к черному? попробуйте в paint.net залить квадрат, а затем применить операцию перехода в "серую" палитру - должно помочь |
Спасибо всем откликнувшимся. Решил остановиться на совете Iska (особое спасибо за наглядность:)). Перевожу RGB в Lab, и сравниваю параметр L c 50, если меньше считаю цвет темным (подписываю белым), иначе светлым (подписываю черным). Тему считаю решенной.
|
Время: 00:57. |
Время: 00:57.
© OSzone.net 2001-