реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Альфа канал для 16 битного цвета, Как умножать не разделяя на компоненты
DpInRock
сообщение Feb 17 2010, 14:42
Сообщение #1


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Вот такая проблема.
Для 24 битного цвета легко менять яркость точки, ибо каждый цвет занимает ровно байт (а байт он и есть байт, его легко умножить на альфу - бери и умножай).
Для 16 битного цвета 5:6:5 уже голову сломал.
Выделять каждую составляющую, а потом паковать ее обратно - как-то не очень.
Пытался подобрать некое число, чтобы уможать сразу 16 битный цвет, а компоненты сами бы собой изменялись синхронно и правильно. (Тем более, я выбрал ширину альфа канала всего 4 бита и таких констант было бы не так много).
Неужто в виндах в 16 битном цвете вот так с каждым пикселом мучаются? Тогда он по идее, должен медленнее 24 битного работать? Вернее, процессорного времени больше отбирать...


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 17 2010, 16:03
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Элементарно, если есть 32-битное умножение:
Код
typedef   unsigned short    DISP_COLOR
#define   DISP_MAX_ALPHA    0x20

DISP_COLOR disp_cl_blend(DISP_COLOR color0, DISP_COLOR color1, unsigned char alpha)
{
    unsigned int c0 = color0, c1 = color1, mask = 0x07e0f81f;

    c0 = (c0 | (c0 << 16)) & mask;
    c1 = (c1 | (c1 << 16)) & mask;
    c0 = ((c0 * alpha) >> 5) & mask;
    c1 = ((c1 * (DISP_MAX_ALPHA - alpha)) >> 5) & mask;
    c0 = c0 + c1;
    c0 |= c0 >> 16;

    return (DISP_COLOR)c0;
}
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Feb 17 2010, 19:21
Сообщение #3


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Да, до такого бы я своей головой не додумался бы.
Вернее, заранее не поверил бы, что если просто расчистить место, то можно получить такую красивую конструкцию.
Мерси.

Сообщение отредактировал DpInRock - Feb 17 2010, 19:21


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th June 2025 - 18:46
Рейтинг@Mail.ru


Страница сгенерированна за 0.01365 секунд с 7
ELECTRONIX ©2004-2016