Подтвердить что ты не робот

Программировать темный оттенок

Какой простой способ программно омрачить гексагонный цвет?

4b9b3361

Ответ 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"

Ответ 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, чтобы дать # F0F0F0​​p >

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