Смешивание двух цветов «естественно» в JavaScript
Проблема: Я хочу смешать два цвета в JavaScript и получить цвет результата. Есть много похожих вопросов по SO, однако я не нахожу ничего, что действительно работает правильно. Я знаю, что смешивание двух разноцветных красок (пигментов) и света даст очень разные результаты (http://en.wikipedia.org/wiki/Color_mixing).
Вот вопросы и предлагаемые решения, которые я уже видел и пытался реализовать:
1: Смешивание двух цветовых векторов RGB для получения результата
Итак, смешивание цветов в RGB. Я реализовал это, и в некоторых случаях это работает, в некоторых случаях это не так.
Рабочий пример: смешиваниеred
с участиемyellow
->orange
, Большой!
http://jsbin.com/afomim/1/edit
Не рабочий пример: смешиваниеblue
с участиемyellow
->gray
, Не так здорово! :)http://jsbin.com/afomim/5/edit
Я знаю, что в микшировании RGBblue
с участиемyellow
никогда не сделаетgreen
и я понимаю почему.
Мы не найдем здесь ответа, пойдем дальше.
2: Добавление цветов (цветов) вместе, как краска (синий + желтый = зеленый и т. Д.)
Давайте попробуем работать со значениями CMYK, как предлагается в этом обсуждении. смешиваниеcyan
с участиемyellow
даетgreen
:
http://jsbin.com/igaveg/1/edit
но смешиваниеblue
с участиемyellow
результаты вblack
.
http://jsbin.com/igaveg/2/edit -> Не работает!
3: Как смешивать цвета "естественно" с C #?
Очень похожий вопрос. Наиболее одобренный ответ предлагает преобразовать цвета в LAB, и это решение кажется многообещающим.
Поэтому я преобразовал свои цвета в LAB. Алгоритм преобразования правильный, я его проверил!
http://jsbin.com/oxefox/1/edit
Теперь у меня есть два цвета в LAB, но как их смешать?
НОТА Я знаю, что, вероятно, я не найду алгоритм, который смешиваетblue
с участиемyellow
и даст идеальныйgreen
, но я надеюсь, что смогу создать что-то похожее на зеленый :)