Как делается прозрачность?

Модератор: Модераторы разделов

NickNill
Сообщения: 115
ОС: ArchLinux

Как делается прозрачность?

Сообщение NickNill »

Привет всем. Меня вот интересует, как создается прозрачность? например отдельных элементов интерфейса. Подскажите (кроссплатформенную) библиотеку\метод. Заранее спасибо.
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Как делается прозрачность?

Сообщение NickLion »

Метод - очень прост. Задаётся так называемый альфа-канал. 0 - прозрачное, 1 - непрозрачное, промежуточное - полупрозрачное.
Считается по формуле (Non-premulted):
Color=SrcColor*α+DstColor*(1-α)
Это для каждого из каналов (красный, зелёный, синий)
(Если premulted:
Color=SrcColor+DstColor*(1-α)
В этом случае SrcColor не превышает MaxColor*α)
На практике, обычно задаётся масштабированное целочисленное значение (0-255), тогда
Color=(SrcColor*α+DstColor*(255-α))/255.

Насчёт библиотек - Qt4 поддерживает, OpenGL. За GTK+ утверждать не буду, но по идее - тоже есть поддержка.
Спасибо сказали:
NickNill
Сообщения: 115
ОС: ArchLinux

Re: Как делается прозрачность?

Сообщение NickNill »

Спасибо большое за ответ.
Есть где-то что-то почитать на эту тему? Просто если SrcColor я могу понять что это(фактически изначальный цвет), то DstColor не понимаю. Color это "цвет" самого альфа-канала получается?
Спасибо сказали:
Аватара пользователя
Voral
Сообщения: 1205
ОС: Debian Wheezy (amd64)

Re: Как делается прозрачность?

Сообщение Voral »

NickNill писал(а):
06.04.2010 01:44
Спасибо большое за ответ.
Есть где-то что-то почитать на эту тему? Просто если SrcColor я могу понять что это(фактически изначальный цвет), то DstColor не понимаю. Color это "цвет" самого альфа-канала получается?

если у вас что то (полу)прозрачное, то оно находится над чемто. Иначе вы ни какой полупрозрачности неосознаете. Отсюда у вас и появляются три цвета: цвет вашего объекта , цвет объекта/фона находящегося под вашим объектом, и цвет (который рассчитывается в формуле выше) которым таки будут рисоваться пикселы/область..... Альфа в формуле это степень прозрачности.
У альфа канала нет цвета, это прозрачность, точнее уровень прозрачности . Например в PNG этих уровней дофига (точнее зависит от типа PNG) - где отводится 8 или 24 бита на это дело
То что не убивает нас, делает нас сильнее! © Ницше.
When life puts you in tough situations, don’t say "why me". Just say "try me © ?
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Как делается прозрачность?

Сообщение NickLion »

Voral писал(а):
06.04.2010 08:32
Например в PNG этих уровней дофига (точнее зависит от типа PNG) - где отводится 8 или 24 бита на это дело

Небольшая поправочка: если правильно помню спецификацию PNG, на канал 8 или 16 бит может быть (неиндексированный режим). На практике, обычно, обходятся 256 уровнями - достаточно в 95%.
Спасибо сказали: