Какой простой способ программно омрачить гексагонный цвет?
Программировать темный оттенок
Ответ 1
Если вы не беспокоитесь о слишком большом контроле и просто хотите более темную версию цвета, то:
col = (col & 0xfefefe) >> 1;
Является хорошим быстрым способом сократить вдвое значение цвета (при условии, что он упакован как байт на канал, очевидно).
Точно так же ярче было бы:
col = (col & 0x7f7f7f) << 1;
Ответ 2
Преобразование шестнадцатеричного цвета в целые компоненты RBG:
#FF6600 = rbg(255, 102, 0)
Если вы хотите сделать его темнее на 5%, а затем просто уменьшите все целочисленные значения на 5%:
255 - 5% = 242
102 - 5% = 96
0 - 5% = 0
= rbg(242, 96, 0)
Преобразовать обратно в шестнадцатеричный цвет
= #F26000
Ответ 3
Функция, реализованная в javascript:
// credits: richard maloney 2006
function getTintedColor(color, v) {
if (color.length >6) { color= color.substring(1,color.length)}
var rgb = parseInt(color, 16);
var r = Math.abs(((rgb >> 16) & 0xFF)+v); if (r>255) r=r-(r-255);
var g = Math.abs(((rgb >> 8) & 0xFF)+v); if (g>255) g=g-(g-255);
var b = Math.abs((rgb & 0xFF)+v); if (b>255) b=b-(b-255);
r = Number(r < 0 || isNaN(r)) ? 0 : ((r > 255) ? 255 : r).toString(16);
if (r.length == 1) r = '0' + r;
g = Number(g < 0 || isNaN(g)) ? 0 : ((g > 255) ? 255 : g).toString(16);
if (g.length == 1) g = '0' + g;
b = Number(b < 0 || isNaN(b)) ? 0 : ((b > 255) ? 255 : b).toString(16);
if (b.length == 1) b = '0' + b;
return "#" + r + g + b;
}
Пример:
> getTintedColor("ABCEDEF", 10)
> #c6f7f9
Ответ 4
Хорошо, у меня нет псевдокода для вас, но есть подсказка. Если вы хотите затемнить цвет и поддерживать его оттенок, вы должны преобразовать этот гекс в HSB (оттенок, насыщенность, яркость), а не RGB. Таким образом, вы можете настроить яркость, и она будет по-прежнему выглядеть одинаковым цветом без изменения оттенка. Затем вы можете преобразовать этот HSB обратно в hex.
Ответ 5
given arg darken_factor # a number from 0 to 1, 0=no change, 1=black
for each byte in rgb_value
byte = byte * (1 - darken_factor)
Ответ 6
- Разделите шестнадцатеричный цвет на его компоненты RGB.
- Преобразование каждого из этих компонентов в целочисленное значение.
- Умножьте это целое на дробь, например
0.5
, убедившись, что результат тоже целочисленный.- В качестве альтернативы вычтите заданное количество из этого целого числа, не заходя ниже 0.
- Преобразуйте результат в шестнадцатеричный.
- Объединить эти значения в порядке RGB и использовать.
Ответ 7
Вы должны опустить цвет в цветовом пространстве L * a * b *. Вот пример в JavaScript с помощью chroma.js:
chroma.hex("#FCFC00").darker(10).hex() // "#dde000"
Ответ 8
Я собрал для этого приятную двухстрочную функцию:
Программно осветить или затемнить шестицветный (или цвета rgb и blend)
shadeColor2(hexcolor,-0.05)
на 5% темнее
shadeColor2(hexcolor,-0.25)
на 25% темнее
Используйте положительные эффекты для освещения.
Ответ 9
Цвет RGB (в шестнадцатеричной нотации RGB) становится темнее или легче, регулируя оттенок, ключ, яркость или яркость. См. Детскую площадку: colorizer.org
Вариант 1. Переведите значения R, G, B, чтобы затемнить тень
Этот простой, но простой в использовании. Здесь вычитается 16 баллов из шкалы (0,255) от каждого значения:
myHex = 0x8c36a9;
darkerHex = myHex - 0x101010;
# 0x7c2699;
Шестнадцатеричное значение будет уменьшаться, если любое из значений R, G, B 0x0f
или ниже. Что-то вроде этого исправит это.
myHex = 0x87f609;
darkenBy = 0x10;
floor = 0x0;
darkerHex = (max((myHex >> 16) - darkenBy, floor) << 16) + \
(max(((myHex & 0xff00) >> 8) - darkenBy, floor) << 8) + \
max(((myHex & 0xff) - darkenBy), floor);
# 0x77e600
# substitute `ceiling=0xff;` and `min((myHex ...) + lightenBy, ceiling)` for lightening
Вариант 2. Значения шкалы R, G, B для увеличения черного
В модели CMYK ключ (черный) равен 1 - макс значений R, G, B на (0,1).
Это достаточно просто, что вы можете получить хорошие результаты без слишком большого количества кода. Вы изменяете распределение значений R, G, B одним масштабирующим фактором.
Выражайте масштабный коэффициент как шестизначный шестизначный (так что 50% будет .5*0x100
или 0x80
, 1/16th - 0x10
и 10% округляется до 0x19
).
# Assumes integer division ... looking at you python3 >:(
myHex = 0x8c36a9;
keyFactor = 0x10; # Lighten or darken by 6.25%
R = myHex >> 16; # 0x8c
G = (myHex & 0xff00) >> 8; # 0x36
B = myHex & 0xff; # 0xa9
darkerHex = ((R-R*keyFactor/0x100) << 16) + # Darker R
((G-G*keyFactor/0x100) << 8) + # Darker G
(B-B*keyFactor/0x100); # Darker B
# 0x84339f
# substitute `(X+keyFactor-X*keyFactor/0x100)` for lightening
# 0x9443af
Вариант 3. Уменьшите яркость или яркость при постоянном цвете
В HSL представление RGB, легкость - это средняя точка между min и max значений R, G, B. Для HSV яркость является максимальным значением R, G, B.
Подумайте о том, как использовать встроенный или внешний RGB/HEX язык в конвертере HSL/HSV. Затем отрегулируйте ваши значения L/V и конвертируйте обратно в RGB/HSL. Вы можете выполнить преобразование вручную, как в # 1 и # 2, но реализация может не сохранять вас в любое время по существующему конвертеру (см. Ссылки для математики).
Ответ 10
Шестигранный цвет, такой как #FCFCFC, состоит из трех пар, представляющих RGB. Вторая часть каждой пары может быть уменьшена, чтобы затемнить любой цвет без значительного изменения цвета.
например. чтобы затемнить #FCFCFC, опустите значения C, чтобы дать # F0F0F0p >
Уменьшение первой части каждой пары на небольшое количество также приведет к затемнению цвета, но вы начнете больше влиять на цвет (например, поворачивая зеленый до синего).