Альфа-смешение (DirectShow)
[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать в новом коде MediaPlayer, IMFMediaEngine и аудио/видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, в котором используются устаревшие API, чтобы по возможности использовать новые API.]
[Этот API не поддерживается и может быть изменен или недоступен в будущем.]
В этой статье описывается альфа-смешение в службах редактирования DirectShow (DES).
Альфа-канал измеряет прозрачность пикселя или изображения. В 32-разрядном несжатом rgb-видео каждый пиксель определяется четырьмя компонентами: альфа-канал (A) и три компонента цвета (RGB). Пиксель с альфа-значением, равным нулю, является полностью прозрачным. Пиксель с альфа-значением 255 является непрозрачным. Между этими значениями пиксель имеет различные степени прозрачности.
DirectShow определяет два типа мультимедиа для 32-разрядного видео RGB:
- MEDIASUBTYPE_ARGB32: видео представляет собой 32-разрядную rgb-версию с допустимым альфа-каналом.
- MEDIASUBTYPE_RGB32. Пиксели имеют размер 32 бита, но альфа-канал не обязательно является допустимым.
Чтобы выполнить альфа-смешение в DES, задайте для несжатого типа мультимедиа группы видео значение MEDIASUBTYPE_ARGB32. В C++ вызовите метод IAMTimelineGroup::SetMediaType . В формате XTL это также достигается при установке атрибута bitdepth элемента group в значение 32.
Далее вам потребуются видеоданные, содержащие альфа-канал. Существует несколько вариантов.
- Вы можете использовать AVI-файл, который уже содержит 32-разрядное видео RGB с альфа-данными. В настоящее время альфа-канал не поддерживается для исходных файлов ФОРМАТА MPEG или Microsoft Windows Media (WMF).
- DES поддерживает 32-разрядные файлы растровых изображений (.bmp) и Targa (.tga) с альфа-данными.
- Вы можете написать пользовательский фильтр источника, который создает 32-разрядные данные RGB с альфа-каналом. Тип выходного носителя должен быть MEDIASUBTYPE_ARGB32. Используйте фильтр в качестве подобъекта в исходном объекте временная шкала.
Если в источнике видео отсутствует альфа-канал, можно использовать эффект, который создает альфа-данные. Эффект альфа-задания задает для альфа-канала для всего изображения постоянное значение. Чтобы изменить альфа-канал с течением времени, используйте интерфейс IPropertySetter с эффектом альфа-сеттера. Исходный источник не обязательно должен быть 32 бита, если тип несжатого носителя группы MEDIASUBTYPE_ARGB32.
Наконец, передайте видео эффекту или переходу, который выполняет альфа-смешение. Переход композитора выполняет альфа-смешение, а переход ключа может выполнять ключ по альфа-значению.
В следующем примере проекта XTL выполняется альфа-смешение:
<timeline>
<group type="video" bitdepth="32" width="320" height="240">
<track>
<clip start="0" stop="6" src="c:\Example.avi" />
</track>
<track>
<clip start="0" stop="6" src="c:\Example2.avi">
<!-- Alpha Setter effect. -->
<effect clsid="{506D89AE-909A-44f7-9444-ABD575896E35}" start="0" stop="6">
<param name="alpha" value="255">
<linear time="6" value="0" />
</param>
</effect>
</clip>
<!-- Key transition, with alpha keying. -->
<transition clsid="{C5B19592-145E-11d3-9F04-006008039E37}" start="0" stop="6">
<param name="KeyType" value="3" />
</transition>
</track>
</group>
</timeline>
Связанные темы