Freigeben über


Alphamischung (DirectShow)

[Das dieser Seite zugeordnete Feature DirectShow ist ein Legacyfeature. Es wurde von MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation abgelöst. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code mediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation anstelle von DirectShow verwendet, wenn möglich. Microsoft schlägt vor, dass vorhandener Code, der die Legacy-APIs verwendet, so umgeschrieben wird, dass nach Möglichkeit die neuen APIs verwendet werden.]

[Diese API wird nicht unterstützt und kann in Zukunft geändert oder nicht mehr verfügbar sein.]

In diesem Artikel wird die Alphamischung in DirectShow Editing Services (DES) beschrieben.

Alpha misst die Transparenz eines Pixels oder Bilds. In unkomprimierten 32-Bit-RGB-Videos definieren vier Komponenten jedes Pixel: ein Alphakanal (A) und drei Farbkomponenten (RGB). Ein Pixel mit dem Alphawert 0 (null) ist vollständig transparent. Ein Pixel mit dem Alphawert 255 ist undurchsichtig. Zwischen diesen Werten weist das Pixel verschiedene Transparenzgrade auf.

DirectShow definiert zwei Medientypen für 32-Bit-RGB-Video:

  • MEDIASUBTYPE_ARGB32: Das Video ist 32-Bit-RGB mit einem gültigen Alphakanal.
  • MEDIASUBTYPE_RGB32: Pixel sind 32 Bit, aber der Alphakanal ist nicht notwendigerweise gültig.

Legen Sie zum Durchführen der Alphamischung in DES den unkomprimierten Medientyp der Videogruppe auf MEDIASUBTYPE_ARGB32 fest. Rufen Sie in C++ die IAMTimelineGroup::SetMediaType-Methode auf. Im XTL-Format wird dies ebenfalls durch Festlegen des bitdepth-Attributs des group-Elements auf 32 erreicht.

Als Nächstes benötigen Sie Videodaten, die einen Alphakanal enthalten. Es gibt mehrere Optionen:

  • Sie können eine AVI-Datei verwenden, die bereits 32-Bit-RGB-Video mit Alphadaten enthält. Derzeit wird Alpha für MPEG- oder WMF-Quelldateien (Windows Media Format) nicht unterstützt.
  • DES unterstützt 32-Bit-Bitmapdateien (.bmp) und Targa-Dateien (.tga) mit Alphadaten.
  • Sie können einen benutzerdefinierten Quellfilter schreiben, der 32-Bit-RGB-Daten mit Alpha erstellt. Der Ausgabemedientyp muss MEDIASUBTYPE_ARGB32 sein. Verwenden Sie den Filter als Unterobjekt in einem Zeitleiste Quellobjekt.

Wenn Ihre Videoquelle kein Alpha aufweist, können Sie einen Effekt verwenden, der Alphadaten erstellt. Der Alpha-Setter-Effekt legt den Alphakanal für das gesamte Bild auf einen konstanten Wert fest. Um das Alpha im Laufe der Zeit zu variieren, verwenden Sie die IPropertySetter-Schnittstelle mit dem Alpha Setter-Effekt. Die ursprüngliche Quelle muss nicht aus 32 Bit bestehen, solange der nicht komprimierte Medientyp der Gruppe MEDIASUBTYPE_ARGB32 ist.

Übergeben Sie schließlich das Video an einen Effekt oder Übergang, der die Alphamischung ausführt. Der Compositor-Übergang führt eine Alphamischung durch, und der Schlüsselübergang kann nach Alphawert schlüsseln.

Im folgenden XTL-Beispielprojekt wird eine Alphamischung durchgeführt:

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

Verwenden von DirectShow-Bearbeitungsdiensten