Fusion alpha (DirectShow)

[La fonctionnalité associée à cette page, DirectShow, est une fonctionnalité héritée. Il a été remplacé par MediaPlayer, IMFMediaEngine et Audio/Video Capture dans Media Foundation. Ces fonctionnalités ont été optimisées pour Windows 10 et Windows 11. Microsoft recommande vivement au nouveau code d’utiliser MediaPlayer, IMFMediaEngine et La capture audio/vidéo dans Media Foundation au lieu de DirectShow, lorsque cela est possible. Microsoft suggère que le code existant qui utilise les API héritées soit réécrit pour utiliser les nouvelles API si possible.]

[Cette API n’est pas prise en charge et peut être modifiée ou indisponible à l’avenir.]

Cet article décrit la fusion alpha dans DirectShow Editing Services (DES).

Alpha mesure la transparence d’un pixel ou d’une image. Dans la vidéo RVB 32 bits non compressée, quatre composants définissent chaque pixel : un canal alpha (A) et trois composants de couleur (RVB). Un pixel avec une valeur alpha de zéro est entièrement transparent. Un pixel avec une valeur alpha de 255 est opaque. Entre ces valeurs, le pixel a différents degrés de transparence.

DirectShow définit deux types de médias pour la vidéo RVB 32 bits :

  • MEDIASUBTYPE_ARGB32 : la vidéo est RVB 32 bits avec un canal alpha valide.
  • MEDIASUBTYPE_RGB32 : les pixels sont de 32 bits, mais le canal alpha n’est pas nécessairement valide.

Pour effectuer une fusion alpha dans DES, définissez le type de média non compressé du groupe vidéo sur MEDIASUBTYPE_ARGB32. En C++, appelez la méthode IAMTimelineGroup::SetMediaType . Au format XTL, la définition de l’attribut bitdepth de l’élément group sur 32 permet également d’effectuer cette opération.

Ensuite, vous avez besoin de données vidéo qui contiennent un canal alpha. Il existe plusieurs options :

  • Vous pouvez utiliser un fichier AVI qui contient déjà une vidéo RVB 32 bits avec des données alpha. Actuellement, alpha n’est pas pris en charge pour les fichiers sources MPEG ou Microsoft Windows Media Format (WMF).
  • DES prend en charge les fichiers bitmap 32 bits (.bmp) et Targa (.tga) avec des données alpha.
  • Vous pouvez écrire un filtre source personnalisé qui crée des données RVB 32 bits avec alpha. Le type de média de sortie doit être MEDIASUBTYPE_ARGB32. Utilisez le filtre comme sous-objet dans un objet source chronologie.

Si votre source vidéo n’a pas d’alpha, vous pouvez utiliser un effet qui crée des données alpha. L’effet Alpha Setter définit le canal alpha de l’image entière sur une valeur constante. Pour faire varier l’alpha au fil du temps, utilisez l’interface IPropertySetter avec l’effet Alpha Setter. La source d’origine n’a pas besoin d’être 32 bits, tant que le type de média non compressé du groupe est MEDIASUBTYPE_ARGB32.

Enfin, passez la vidéo à un effet ou à une transition qui effectue un mélange alpha. La transition compositor effectue un mélange alpha, et la transition de clé peut clé par valeur alpha.

L’exemple de projet XTL suivant effectue un mélange alpha :

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

Utilisation de DirectShow Editing Services