Hex Color - формула, чтобы сделать его более ярким - PullRequest
9 голосов
/ 23 августа 2009

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

Ответы [ 3 ]

17 голосов
/ 23 августа 2009

Вы можете преобразовать в HSV (используя формулу из википедии здесь ) Затем увеличьте значение V , затем выполните обратное преобразование с формулой снизу на той же странице.

8 голосов
/ 23 августа 2009

Стандартный ответ - преобразовать в другое цветовое пространство с яркостью в виде одной оси, а затем напрямую манипулировать этим значением. Мне не нравится этот ответ, потому что он не говорит вам, что вы получите, когда превысите цветовую гамму.

Если под ярче вы подразумеваете более интенсивный, вы можете просто умножить каждое значение R, G, B на одно и то же значение, где это значение> 1. Например, чтобы сделать его на 20% ярче, умножьте каждое значение на 1,2.

Если какое-либо из полученных значений превышает 255, вы превысили пределы гаммы RGB. Вероятно, лучшее, что нужно сделать в этом случае, это приблизить цвет к белому, чтобы он был светлее, но менее насыщенным или интенсивным. Давайте возьмем пример начального RGB (50 192 240), который вы хотите сделать на 20% ярче. Результат (60,230,288) - красный и зеленый находятся в пределах границ, но синий слишком яркий и переполнен. Возьмите излишки и распределите их поровну по другим цветам - 288-255 - это 33, поэтому добавьте 16,5 к красному и зеленому; округление дает результат (77 247 255).

0 голосов
/ 23 августа 2009

Хорошо видно, что цвета - это всего 3 байта от r / g / b, и вы можете преобразовать каждый байт в целое число (0-255) и увеличить каждый байт на одно и то же произвольное число. Завершите, преобразовав каждый байт обратно в гекс. Пример:

Начиная с цвета: #224466

Пересчитано в целые числа r = 34, g = 68 и b = 102

Увеличивая на произвольное число (скажем, 60), вы получаете r = 94, g = 128 и b = 162

Преобразование обратно в гекс дает вам: #5E80A2

Обратите внимание, что верхний предел равен 255 (белый), а нижний - 0 (черный)

РЕДАКТИРОВАТЬ: Как Марк указывает на этот недостаток. Это можно исправить с помощью дополнительного правила: если начальное значение равно 0, не изменяйте его;)

...