Страницы

Поиск по вопросам

среда, 4 декабря 2019 г.

Как программно понять, что текст заданного цвета будет затруднено прочитать на выбранном цвете фона?

#c_sharp


Пишу окно лога программы, выводятся сообщения разного цвета в зависимости от типа
сообщения. Периодически возникает такая комбинация цветов, что текст сложно прочитать.
Хочу динамически менять цвет текста в зависимости от цвета фона, чтобы было не проблематично
воспринимать информацию.

Есть два цвета представленные в RGB (Color). Первый цвет - это цвет текста, второй
цвет - это цвет фона. Как программно понять, что цвет текста будет сложно различим
на цвете фона?.. Мне кажется есть достаточно простое решение, но никак не могу до него
додуматься... Порог выберу опытным путем, чтобы менять цвет текста, но не могу понять,
что нужно сравнить в этих цветах, чтобы 100% мог утверждать: "Да, сложности прочтения
текста не будет".
    


Ответы

Ответ 1



Я думаю самый простой способ - это взять длины векторов цвета фона и текста (SQRT(R^2+b^2+G^2)) И вычесть их друг из друга - если разность маленькая - то плохо видно. Можно наверное ещё перегнать в монохромность (там примерно как длинна только с определёнными коэфицентами основанными на восприятии цвета глазом) и так же проверить.

Ответ 2



Можете также воспользоваться гайдлайнами W3C Color Readability, основанных на переводе в YIQ color space. Color visibility can be determined according to the following algorithm: Two colors provide good color visibility if the brightness difference and the color difference between the two colors are greater than a set range. Color brightness is determined by the following formula: ((Red value X 299) + (Green value X 587) + (Blue value X 114)) / 1000 Note: This algorithm is taken from a formula for converting RGB values to YIQ values. This brightness value gives a perceived brightness for a color. Color difference is determined by the following formula: (maximum (Red value 1, Red value 2) - minimum (Red value 1, Red value 2)) + (maximum (Green value 1, Green value 2) - minimum (Green value 1, Green value 2)) + (maximum (Blue value 1, Blue value 2) - minimum (Blue value 1, Blue value 2)) The range for color brightness difference is 125. The range for color difference is 500. См. также http://goo.gl/H7Q5d

Комментариев нет:

Отправить комментарий