Без знака Int и Цвета - PullRequest
       15

Без знака Int и Цвета

0 голосов
/ 05 декабря 2011

Я пытаюсь изменить цвет чего-либо, используя беззнаковое целое (0xFF998877 и т. Д.) В форме 0xAABBGGRR, где A - альфа, а B, G и R - синий, зеленый и красный.

Однако мне интересно, как лучше изменить цвет, который я передаю, чтобы он постепенно становился темнее или светлее.

Поскольку у меня нет большого опыта работы с unsigned int в этомМоим решением было просто уменьшить значение на 1, но это дало странные результаты.Есть ли хороший способ изменить только элементы RGB и сохранить постоянную альфа?В своем скудном исследовании я обнаружил, что мог бы умножить другие целые числа без знака для получения окончательного результата, например (0xFF * 0x99 * 0x99 * 0x99), но это все равно оставило переменную альфа-значения в конечном результате.

Любая помощь с благодарностью!

Ответы [ 2 ]

2 голосов
/ 05 декабря 2011

Что вам нужно сделать, это преобразовать ваш цвет в HSL (или HSV) , а затем изменить яркость (или значение) по своему усмотрению.Затем вам нужно преобразовать его обратно в RGB.

В Интернете имеется огромное количество кода, который вы можете использовать для этого преобразования.Если бы у вас были проблемы с этим, я мог бы предоставить вам мой собственный код.

0 голосов
/ 05 декабря 2011

Я ничего не знаю о манипулировании цветом в C ++, но не могли бы вы просто использовать битовую маску? Или написать класс, который представляет цвет, используя 4 UINT8 (unsigned char)? Тогда вы могли бы легко написать все виды манипуляций на разных каналах.

Это было бы и для отличного API:

Colour c(128,50,50,0);
c.saturateRed(10);
c.darkerBySteps(3);
c.desaturateGreen(10);
UINT32 rawColVal = c.getRawValue();
...