Алгоритм/формула для подбора цвета в RGB по монохромным образцам
В сети интернет много статей о преобразовании цвета в RGB в градации серого. Где утверждается, что составляющие RGB вносят разный вклад в цветовосприятие, поэтому приводится формула преобразования с коэффициентами, если я не ошибаюсь:
((0.2989*R)+(0.5870*G)+(0.1141*B))
Меня интересует обратная задача. Например у меня есть цвет зеленого оттенка
и пусть ему соответствует (не переводится, а именно соответствует)
. Вопрос, как мне, учитывая вышеозначенное соответствие, найти оттенки зеленого для:
| Оттенок серого | Оттенок зеленого |
|---|---|
![]() |
![]() |
![]() |
? |
![]() |
? |
![]() |
? |
Интересует алгоритм/формула.
Ответы (1 шт):
Решение подсказали знакомые. Частичное - в сторону осветления. Но меня это устраивает, и вот пример, как получается:
| Оттенок серого | Оттенок зеленого |
|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
В первой строчке, в левом столбце серый цвет, который нужно заменить зеленым (салатовым), который справа. В строчках ниже серый цвет становится ярче - для него считаем оттенки "опорного" (салатового). Формула будет следующая для каждой цветовой компоненты отдельно:
V = 255 - (255 - Color) * (255 - Gray) / (255 - Start)
, где:
- V - рассчитываемое значение новой цветовой составляющей из RGB
- Color - цветовая составляющая опорного цвета
- Gray - цветовая составляющая рассчитываемого серого цвета
- Start - цветовая составляющая стартового серого цвета
Пример расчета для #E2E2E2:
R = 255 - (255 - 0x90) * (255 - 0xE2) / (255 - 0xDA) = 0xA8
G = 255 - (255 - 0xD1) * (255 - 0xE2) / (255 - 0xDA) = 0xDB
B = 255 - (255 - 0x2D) * (255 - 0xE2) / (255 - 0xDA) = 0x5A
Округления делал 0.5 и меньше - в меньшую сторону, более 0.5 - в большую. Если кто напишет более универсальную формулу/способ, в том числе не только для осветления, но и для затемнения - вэлком. Ну а мой вопрос решен.








