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>
Zugehörige Themen