Например 168, 0, 255
, учитывая значение RGB, как мне создать оттенки (сделать его светлее) и оттенки (сделать его темнее) цвета?
Среди нескольких вариантов растушевки и тонировки:
Для оттенков умножьте каждый компонент на 1/4, 1/2, 3/4 и т. Д. От его предыдущего значения. Чем меньше коэффициент, тем темнее оттенок.
Для оттенков вычислите (255 - предыдущее значение), умножьте это на 1/4, 1/2, 3/4 и т. Д. (Чем больше коэффициент, тем светлее оттенок), и прибавьте это к предыдущему значению (предполагая, что каждый .component - это 8-битное целое число).
Обратите внимание, что манипуляции с цветом (например, оттенки и другие оттенки) должны выполняться в линейном RGB . Однако цвета RGB, указанные в документах или закодированные в изображениях и видео, вряд ли будут в линейном RGB, и в этом случае к каждому из компонентов цвета RGB необходимо применить так называемую функцию обратной передачи . Эта функция зависит от цветового пространства RGB. Например, в цветовом пространстве sRGB (что можно предположить, если цветовое пространство RGB неизвестно) эта функция примерно эквивалентна увеличению каждого цветового компонента sRGB (в диапазоне от 0 до 1) до степени 2,2. (Обратите внимание, что «линейный RGB» не является цветовым пространством RGB.)
См. Также комментарий Violet Giraffe о «гамма-коррекции».
rs = r * 0.25
,gs = g * 0.25
,bs = b * 0.25
(то есть довольно темный оттенок); Оттенок (к.т., г.т., Ь):rt = r + (0.25 * (255 - r))
,gt = g + (0.25 * (255 - g))
,bt = b + (0.25 * (255 - b))
(то есть довольно светло - оттенок). Я сделал это как часть классного массива, который создавал множество оттенков, и он отлично работал. Надеюсь, это поможет. Спасибо, Питер.Некоторые определения
Создание оттенка или тени
В зависимости от вашей цветовой модели существуют разные методы создания более темного (затемненного) или более светлого (тонированного) цвета:
RGB
:Для растушевки:
Подкрашивать:
В более общем смысле, цвет, в результате которого получается наслоение
RGB(currentR,currentG,currentB)
цвета,RGBA(aR,aG,aB,alpha)
выглядит следующим образом:где
(aR,aG,aB) = black = (0,0,0)
для растушевки, а(aR,aG,aB) = white = (255,255,255)
для тонировкиHSV
илиHSB
:Value
/Brightness
или увеличьтеSaturation
Saturation
или увеличьтеValue
/Brightness
HSL
:Lightness
Lightness
Существуют формулы для преобразования одной цветовой модели в другую. Согласно вашему первоначальному вопросу, если вы находитесь
RGB
и хотите использоватьHSV
модель, например, для затенения, вы можете просто преобразоватьHSV
, выполнить затенение и преобразовать обратно вRGB
. Формулы для преобразования нетривиальны, но их можно найти в Интернете. В зависимости от вашего языка он также может быть доступен как основная функция:Сравнение моделей
RGB
имеет то преимущество, что его очень просто реализовать, но:HSV
илиHSB
это сложно, потому что вам нужно поиграть с двумя параметрами, чтобы получить то, что вы хотите (Saturation
&Value
/Brightness
)HSL
лучший с моей точки зрения:50%
означает неизменный оттенок>50%
означает, что оттенок светлее (оттенок)<50%
означает, что оттенок темнее (оттенок)Lightness
деталь)источник
В настоящее время я экспериментирую с холстом и пикселями ... Я считаю, что эта логика работает для меня лучше.
добавить, чтобы компенсировать значение оттенка
или что-то вроде того...
источник