Compartilhar via


Combinação alfa (DirectShow)

[O recurso associado a esta página, DirectShow, é um recurso herdado. Foi substituído por MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation em vez de DirectShow, quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]

[Não há suporte para essa API e pode ser alterada ou indisponível no futuro.]

Este artigo descreve a mesclagem alfa no DIRECTShow Editing Services (DES).

Alfa mede a transparência de um pixel ou imagem. No vídeo RGB descompactado de 32 bits, quatro componentes definem cada pixel: um canal alfa (A) e três componentes de cor (RGB). Um pixel com um valor alfa de zero é completamente transparente. Um pixel com um valor alfa de 255 é opaco. Entre esses valores, o pixel tem vários graus de transparência.

O DirectShow define dois tipos de mídia para vídeo RGB de 32 bits:

  • MEDIASUBTYPE_ARGB32: o vídeo é RGB de 32 bits com um canal alfa válido.
  • MEDIASUBTYPE_RGB32: pixels são de 32 bits, mas o canal alfa não é necessariamente válido.

Para executar a mesclagem alfa no DES, defina o tipo de mídia descompactado do grupo de vídeo como MEDIASUBTYPE_ARGB32. Em C++, chame o método IAMTimelineGroup::SetMediaType . No formato XTL, definir o atributo bitdepth do elemento group como 32 também faz isso.

Em seguida, você precisa de dados de vídeo que contenham um canal alfa. Há várias opções:

  • Você pode usar um arquivo AVI que já tenha um vídeo RGB de 32 bits com dados alfa. Atualmente, não há suporte para alfa para arquivos de origem MPEG ou WMF (Microsoft Windows Media Format).
  • O DES dá suporte a arquivos de bitmap (.bmp) de 32 bits e Targa (.tga) com dados alfa.
  • Você pode escrever um filtro de origem personalizado que cria dados RGB de 32 bits com alfa. O tipo de mídia de saída deve ser MEDIASUBTYPE_ARGB32. Use o filtro como o subobjeto em um objeto de origem linha do tempo.

Se a fonte de vídeo não tiver alfa, você poderá usar um efeito que cria dados alfa. O Efeito Setter Alfa define o canal alfa de toda a imagem como um valor constante. Para variar o alfa ao longo do tempo, use a interface IPropertySetter com o Efeito Setter Alfa. A origem original não precisa ter 32 bits, desde que o tipo de mídia descompactado do grupo seja MEDIASUBTYPE_ARGB32.

Por fim, passe o vídeo para um efeito ou transição que executa a mesclagem alfa. A Transição compositora executa a mesclagem alfa e a Transição de Chave pode ser chave por valor alfa.

O seguinte projeto XTL de exemplo executa a mesclagem alfa:

<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>

Usando o DirectShow Editing Services