Войти

Показать полную графическую версию : [решено] Нахождение близости цвета к белому/черному


PhilB
18-07-2012, 00:30
Добрый день.
Возникла такая задача: необходимо надписать цветной сплошно закрашенный объект белым/черным цветом в зависимости от темноты закраски, таким образом, чтоб надпись была хорошо читаема.
То есть например, синий надо подписать белым, а желтый черным. В противном случае надпись не будет различима.
Проблема состоит в том, как определить является ли объект светлым или темным.
Изначально пробовал перевести в hsl (нормированную) и посмотреть его светлость (l). Но таким способом получается, что его светлость равна 0.5 для всех комбинаций содержащей одну или две единицы (в rgb). То есть желтый и синий одинаково близки к черному, что не так. Что-то я не делаю не так, но не понимаю что.
Вопрос в том, как же решить данную задачу?
Заранее благодарен.

Delirium
18-07-2012, 01:13
А если посмотреть в сторону RGB цвета? однозначно ведь будет понятно, что 255,255,255 - это белый, а 0,0,0 - черный. И в зависимости от чисел вывести закономерность и печатать?

Iska
18-07-2012, 02:05
Не хотите посмотреть в сторону LAB (http://ru.wikipedia.org/wiki/LAB):

http://img543.imageshack.us/img543/8734/image00020120718020412.png

CyberDaemon
18-07-2012, 06:56
Как вариант что-нибудь типа
(11*R+30*G+59*B)/100 и посмотреть, к чему ближе результат.

Beyound
18-07-2012, 07:00
вы знаете - желтый (255.255.0) имеет HSL (60.100.100), синий (0.0.255) имеет HSL (240.100.100) и это значит что они одинаково далеки как от белого так и черного.
а разные они потому что желтый и синий сами по себе ближе и дальше от черного как цвет, не осветленный и не затемненный. Вот тут (http://rosdesign.com/design_materials2/colorman.htm) на рисуночке это очень хорошо показано - там внешний круг - цвета, внутренний - отношение к черному.
как определить точное отношение цвета к черному? попробуйте в paint.net залить квадрат, а затем применить операцию перехода в "серую" палитру - должно помочь

PhilB
18-07-2012, 17:21
Спасибо всем откликнувшимся. Решил остановиться на совете Iska (особое спасибо за наглядность:)). Перевожу RGB в Lab, и сравниваю параметр L c 50, если меньше считаю цвет темным (подписываю белым), иначе светлым (подписываю черным). Тему считаю решенной.




© OSzone.net 2001-2012