Как делается прозрачность?
Модератор: Модераторы разделов
-
- Сообщения: 115
- ОС: ArchLinux
Как делается прозрачность?
Привет всем. Меня вот интересует, как создается прозрачность? например отдельных элементов интерфейса. Подскажите (кроссплатформенную) библиотеку\метод. Заранее спасибо.
-
- Сообщения: 3408
- Статус: аватар-невидимка
- ОС: openSUSE Tumbleweed x86_64
Re: Как делается прозрачность?
Метод - очень прост. Задаётся так называемый альфа-канал. 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+ утверждать не буду, но по идее - тоже есть поддержка.
Считается по формуле (Non-premulted):
Color=SrcColor*α+DstColor*(1-α)
Это для каждого из каналов (красный, зелёный, синий)
(Если premulted:
Color=SrcColor+DstColor*(1-α)
В этом случае SrcColor не превышает MaxColor*α)
На практике, обычно задаётся масштабированное целочисленное значение (0-255), тогда
Color=(SrcColor*α+DstColor*(255-α))/255.
Насчёт библиотек - Qt4 поддерживает, OpenGL. За GTK+ утверждать не буду, но по идее - тоже есть поддержка.
-
- Сообщения: 115
- ОС: ArchLinux
Re: Как делается прозрачность?
Спасибо большое за ответ.
Есть где-то что-то почитать на эту тему? Просто если SrcColor я могу понять что это(фактически изначальный цвет), то DstColor не понимаю. Color это "цвет" самого альфа-канала получается?
Есть где-то что-то почитать на эту тему? Просто если SrcColor я могу понять что это(фактически изначальный цвет), то DstColor не понимаю. Color это "цвет" самого альфа-канала получается?
-
- Сообщения: 1205
- ОС: Debian Wheezy (amd64)
Re: Как делается прозрачность?
если у вас что то (полу)прозрачное, то оно находится над чемто. Иначе вы ни какой полупрозрачности неосознаете. Отсюда у вас и появляются три цвета: цвет вашего объекта , цвет объекта/фона находящегося под вашим объектом, и цвет (который рассчитывается в формуле выше) которым таки будут рисоваться пикселы/область..... Альфа в формуле это степень прозрачности.
У альфа канала нет цвета, это прозрачность, точнее уровень прозрачности . Например в PNG этих уровней дофига (точнее зависит от типа PNG) - где отводится 8 или 24 бита на это дело
То что не убивает нас, делает нас сильнее! © Ницше.
When life puts you in tough situations, don’t say "why me". Just say "try me © ?
When life puts you in tough situations, don’t say "why me". Just say "try me © ?
-
- Сообщения: 3408
- Статус: аватар-невидимка
- ОС: openSUSE Tumbleweed x86_64
Re: Как делается прозрачность?
Небольшая поправочка: если правильно помню спецификацию PNG, на канал 8 или 16 бит может быть (неиндексированный режим). На практике, обычно, обходятся 256 уровнями - достаточно в 95%.