Программно затемните Шестнадцатеричный [закрытый] цвет

Примеры: ... В неитерационных циклах Java


:


Невложенные циклы: ... Индекс является значением.

... использование i, , как Вы были бы в Алгебре, является наиболее распространенной практикой ...

for (int i = 0; i < LOOP_LENGTH; i++) {

    // LOOP_BODY
}


Вложенные циклы: ... Дифференциация Индексов предоставляет пониманию.

... использование описательного суффикса ...

for (int iRow = 0; iRow < ROWS; iRow++) {

    for (int iColumn = 0; iColumn < COLUMNS; iColumn++) {

        // LOOP_BODY
    }
}


foreach Циклы: ... Object потребности имя.

... использование описательного имени...

for (Object something : somethings) {

    // LOOP_BODY
}


Итерационные циклы:


for Циклы: ... Ссылочные Объекты итераторов. Итератор это не ни один; Индекс, ни Indice.

... iter abreviates цель Итераторов ...

for (Iterator iter = collection.iterator(); iter.hasNext(); /* N/A */) {

    Object object = iter.next();

    // LOOP_BODY
}


while Циклы: ... Ограничьте объем Итератора.

... комментарий цели циклов ...

/* LOOP_DESCRIPTION */ {

    Iterator iter = collection.iterator();

    while (iter.hasNext()) {

        // LOOP_BODY
    }
}

Этот последний пример читает плохо без комментариев, таким образом, поощряя их. Это является подробным, возможно, но полезным в ограничивающих циклах объема в C.

34
задан TylerH 8 February 2017 в 05:26
поделиться

7 ответов

Если вас не беспокоит слишком много контроля, и вы просто хотите, как правило, более темную версию цвета, то:

col = (col & 0xfefefe) >> 1;

Хороший быстрый способ уменьшить вдвое значение цвета (очевидно, при условии, что оно упаковано в байтах на канал).

Таким же образом будет ярче:

col = (col & 0x7f7f7f) << 1;
38
ответ дан 27 November 2019 в 16:05
поделиться

Функция, реализованная в 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
18
ответ дан 27 November 2019 в 16:05
поделиться

Ну, у меня для вас не псевдокод, а подсказка. Если вы хотите затемнить цвет и сохранить его оттенок, вам следует преобразовать этот шестнадцатеричный код в HSB (оттенок, насыщенность, яркость), а не в RGB. Таким образом, вы можете настроить яркость, и она по-прежнему будет выглядеть одного цвета без изменения оттенка. Затем вы можете преобразовать этот HSB обратно в шестнадцатеричный.

13
ответ дан 27 November 2019 в 16:05
поделиться
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)
5
ответ дан 27 November 2019 в 16:05
поделиться
  • Разделить шестнадцатеричный цвет на его компоненты RGB.
  • Преобразовать каждый из этих компонентов в целое число.
  • Умножьте это целое число на дробь, например 0,5 , убедившись, что результат также является целым числом.
    • В качестве альтернативы, вычтите заданное значение из этого целого числа, чтобы оно не опустилось ниже нуля.
  • Преобразуйте результат обратно в шестнадцатеричный.
  • Объедините эти значения в порядке RGB и используйте.
3
ответ дан 27 November 2019 в 16:05
поделиться

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

например. чтобы затемнить #FCFCFC, уменьшите значения C, чтобы получить # F0F0F0

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

0
ответ дан 27 November 2019 в 16:05
поделиться

Преобразование шестнадцатеричного цвета в целочисленные компоненты RBG:

#FF6600 = rbg(255, 102, 0)

Если вы хотите сделать его темнее на 5%, просто уменьшите все целые значения на 5%:

255 - 5% = 242
102 - 5% = 96
0 - 5% = 0

= rbg(242, 96, 0)

Преобразовать обратно в шестнадцатеричный цвет

= #F26000
25
ответ дан 27 November 2019 в 16:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: