Alphablending (DirectShow)
[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 32-Bit-RGB-Videos definieren vier Komponenten jedes Pixel: einen Alphakanal (A) und drei Farbkomponenten (RGB). Ein Pixel mit einem Alphawert von 0 (null) ist vollständig transparent. Ein Pixel mit einem Alphawert von 255 ist nicht transparent. Zwischen diesen Werten weist das Pixel verschiedene Transparenzgrade auf.
DirectShow definiert zwei Medientypen für 32-Bit-RGB-Videos:
- MEDIASUBTYPE _ ARGB32: Das Video ist 32-Bit-RGB mit einem gültigen Alphakanal.
- MEDIASUBTYPE _ RGB32: Pixel sind 32 Bits, aber der Alphakanal ist nicht unbedingt gültig.
Legen Sie zum Durchführen von Alphablending in DES den nicht komprimierten Medientyp der Videogruppe auf MEDIASUBTYPE _ ARGB32 fest. Rufen Sie in C++ die IAMTimelineGroup::SetMediaType-Methode auf. Im XTL-Format wird dies auch durch Festlegen des bitdepth-Attributs des Gruppenelements 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 über ein 32-Bit-RGB-Video mit Alphadaten verfügt. Alpha wird derzeit nicht für MPEG- oder Microsoft Windows Media Format-Quelldateien (WMF) 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 Zeitachsenquellobjekt.
Wenn Ihre Videoquelle kein Alpha hat, können Sie einen Effekt verwenden, der Alphadaten erstellt. Der Alphasetter-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 AlphaSetter-Effekt. Die ursprüngliche Quelle muss nicht 32 Bits sein, solange der nicht komprimierte Medientyp der Gruppe MEDIASUBTYPE _ ARGB32 ist.
Übergeben Sie schließlich das Video an einen Effekt oder Übergang, der eine Alphamischung durchführt. Der Compositor Transition führt Alphablending durch, und der Schlüsselübergang kann nach Alphawert schlüsseln.
Das folgende XTL-Beispielprojekt führt Alphablending aus:
<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>