Partilhar via


Mistura alfa (DirectShow)

[O recurso associado a esta página, DirectShow, é um recurso herdado. Foi substituído por MediaPlayer, IMFMediaEnginee Audio/Video Capture in Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda vivamente que o novo código utilize MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo no 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.]

[Esta API não é suportada e pode ser alterada ou indisponível no futuro.]

Este artigo descreve a mistura alfa no DirectShow Editing Services (DES).

Alpha mede a transparência de um pixel ou imagem. No vídeo RGB não comprimido 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: Os pixels são de 32 bits, mas o canal alfa não é necessariamente válido.

Para executar a técnica de alpha blending em DES, defina o tipo de mídia não compactada do grupo de vídeo como MEDIASUBTYPE_ARGB32. Em C++, chame o método IAMTimelineGroup::SetMediaType. No formato XTL, ao definir o atributo bitdepth do grupo elemento para 32, também se alcança isso.

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

  • Você pode usar um arquivo AVI que já tenha vídeo RGB de 32 bits com dados alfa. Atualmente, o alfa não é suportado para arquivos de origem MPEG ou Microsoft Windows Media Format (WMF).
  • O DES suporta ficheiros bitmap de 32 bits (.bmp) 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 de linha temporal.

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

Finalmente, passe o vídeo para um efeito ou transição que execute a fusão alfa. O Compositor Transition executa a mistura alfa e o Key Transition pode ser codificado por valor alfa.

O projeto XTL de exemplo a seguir executa a mistura 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