Android меняет яркость цвета

1

Я хочу изменить яркость любого заданного цвета (Примечание: я не говорю о яркости экрана), я посмотрел класс Цвет, он имеет несколько методов для конверсий между RGB и HSV, я новичок в этой области. Для начала, как изменить яркость красного цвета, если его значение указано в RGB (# FF0000)?

Теги:
colors

3 ответа

2
Лучший ответ

Для начала вам нужно запомнить две вещи -

  • Чтобы уменьшить яркость, вы можете изменить красный цвет С# FF0000 на # AA0000 или # 880000 - в основном уменьшить красный компонент.
  • Вы также можете попробовать уменьшить непрозрачность - часто вы поймете, что она работает лучше, чем просто уменьшение яркости.
  • 0
    У меня была идея различной непрозрачности. Как бы я равномерно уменьшил яркость, если бы у меня было что-то вроде # D456FB?
  • 1
    # D456FB эквивалентно # FFD456FB, где первые два символа представляют непрозрачность. Измените его на # 99D456FB, чтобы уменьшить прозрачность. Если вы делаете это с помощью кода, а не с помощью XML, ищите, как увеличить или уменьшить «альфа».
4

Самый простой способ - преобразовать цвет в HSL (не HSV! они разные) см. http://en.wikipedia.org/wiki/HSL_and_HSV) и изменить L компонент - увеличить, чтобы сделать его ярче, уменьшить, чтобы сделать его темнее.

  • 2
    Примеры кода были бы лучше, я смотрел на теорию.
  • 1
    stackoverflow.com/questions/2353211/hsl-to-rgb-color-conversion содержит ссылку на примеры кода.
Показать ещё 2 комментария
2

Учитывая, что вы говорите о яркости (улучшении цвета), а не яркости (белая сумма), ваша модель - HSV (aka HSB), а не HSL.

При быстром брифинге, если вы улучшите V-канал на HSV, скажем... немного синего цвета, у вас есть "более синий" цвет. Если вы увеличите канал L на модели HSL, у вас будет более "прозрачный и стильный" синий цвет.

Класс android.graphics.Color имеет встроенную поддержку модели HSV. Используйте Color.colorToHSV() и Color.HSVToColor(), чтобы отредактировать значение яркости (или оттенок или насыщенность, если хотите).

В модели HSV H (оттенок) определяет базовый цвет, S (насыщенность) контролирует количество серых и V регулирует яркость. Итак, если вы увеличиваете V и уменьшаете S в одно и то же время, вы получаете больше яркости в пратисе.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню