Поделиться через


Альфа-смешение (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>

Использование служб редактирования DirectShow