Condividi tramite


Fusione alfa (DirectShow)

[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation invece di DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

[Questa API non è supportata e potrebbe essere modificata o non disponibile in futuro.]

Questo articolo descrive la fusione alfa in DirectShow Editing Services (DES).

Alfa misura la trasparenza di un pixel o di un'immagine. Nel video RGB non compresso a 32 bit, quattro componenti definiscono ogni pixel: un canale alfa (A) e tre componenti di colore (RGB). Un pixel con un valore alfa pari a zero è completamente trasparente. Un pixel con un valore alfa pari a 255 è opaco. Tra questi valori, il pixel ha vari gradi di trasparenza.

DirectShow definisce due tipi di supporti per video RGB a 32 bit:

  • MEDIASUBTYPE_ARGB32: il video è RGB a 32 bit con un canale alfa valido.
  • MEDIASUBTYPE_RGB32: i pixel sono a 32 bit, ma il canale alfa non è necessariamente valido.

Per eseguire la fusione alfa in DES, impostare il tipo di supporto non compresso del gruppo video su MEDIASUBTYPE_ARGB32. In C++, chiamare il metodo IAMTimelineGroup::SetMediaType . Nel formato XTL impostare anche l'attributo bitdepth dell'elemento group su 32.

Successivamente, sono necessari dati video che contengono un canale alfa. Sono disponibili diverse opzioni:

  • È possibile usare un file AVI che dispone già di video RGB a 32 bit con dati alfa. Attualmente, alpha non è supportato per i file di origine MPEG o Microsoft Windows Media Format (WMF).
  • DES supporta file bitmap a 32 bit (.bmp) e Targa (con estensione tga) con dati alfa.
  • È possibile scrivere un filtro di origine personalizzato che crea dati RGB a 32 bit con alfa. Il tipo di supporto di output deve essere MEDIASUBTYPE_ARGB32. Usare il filtro come oggetto secondario in un oggetto origine sequenza temporale.

Se l'origine video non ha alfa, è possibile usare un effetto che crea dati alfa. L'effetto Setter alfa imposta il canale alfa per l'intera immagine su un valore costante. Per variare l'alfa nel tempo, usare l'interfaccia IPropertySetter con l'effetto Alfa Setter. L'origine originale non deve essere di 32 bit, purché il tipo di supporto non compresso del gruppo sia MEDIASUBTYPE_ARGB32.

Infine, passare il video a un effetto o a una transizione che esegue la fusione alfa. La transizione compositore esegue la fusione alfa e la transizione della chiave può essere chiave per valore alfa.

Il progetto XTL di esempio seguente esegue la fusione 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>

Uso dei servizi di modifica DirectShow