Вопрос

Моя цель с этим алгоритмом, над которым я работаю, - вывести последовательность цветов из некоторых предоставленных цветов. Под цветовой прогрессией я подразумеваю создание эффекта «затухания» между двумя цветами (цвет A, цвет B) и сохранение каждого значения цвета ((R, G, B) кортеж) между ними.

Например, если предоставлено общее количество общих черных кодовых кодов и общее количество белых кодовых кодов, результат прогрессии будет следующим:

A = (0,0,0)

Таким образом, сначала мы получаем белый цвет, а затем он постепенно превращается в черный. Это, конечно, очень просто с белым и черным (просто увеличивайте RGB на один каждый шаг в 255 раз). Но что, если я хочу выполнить эту процедуру с двумя произвольными цветами, например A= (180,69,1) и B= (233,153,0) ??

ВАЖНОЕ ПРИМЕЧАНИЕ. Если с шестнадцатеричным (или любым другим видом цветового обозначения) добиться этого было бы проще, я мог бы работать и с этим, просто укажите, какой тип (примите во внимание, что я работаю над PIL (Python Библиотека изображений), поэтому, если она совместима с ней, я в порядке)

Очевидно, что это должно быть как можно более равномерное распределение, прогрессия должна быть однородной.

Мне нужно выяснить этот алгоритм, чтобы я мог использовать его в своем генераторе фракталов (набор Мандельброта, погуглите, если хотите), поэтому важно, чтобы прогресс был как можно более мягким, без сбоев.

Заранее спасибо.

Это было полезно?

Решение

Преобразуйте свои координаты RGB в HSL или HSV и пошагово переходите по ним, попутно конвертируя обратно в RGB.

Другие советы

Я бы просто интерполировал значения RGB независимо.См. Эту ветку .

Я рекомендую тот же вопрос, что и Джим Клей, но читайте в самом верхнем .или см. Википедию относительно интерполяции .

Мой ответ на вопрос SO под названием Диапазон значений для псевдоцвета может быть вам полезен, поскольку показывает один из способов создания определенного цветового градиента (общее название того, что вы называете цветовой прогрессией).

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

Затем, начиная со значения каждого из компонентов первого цвета, соответствующее дробное количество может быть добавлено к нему снова и снова, чтобы определить цвет каждого промежуточного шага. В качестве альтернативы, арифметическая ошибка, присущая этому подходу, может быть уменьшена путем добавления кода (step_number/total_steps) * fractional_delta к начальным значениям компонентов цвета начального цвета.

Я думаю, это то, что @Jim Clay также говорит в своем ответе. Если вам нужен образец кода, сообщите об этом в комментарии.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top