アルファ ブレンド (DirectShow)
[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、および Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayer、IMFMediaEngine、Audio/Video Capture を使用することを強くお勧めします。 Microsoft は、従来の API を使用する既存のコードを、可能であれば新しい API を使用するように書き直すよう提案しています。]
[この API はサポートされていないため、今後変更または使用できない可能性があります。]
この記事では、 DirectShow Editing Services (DES) でのアルファ ブレンドについて説明します。
アルファは、ピクセルまたは画像の透明度を測定します。 32 ビットの非圧縮 RGB ビデオでは、アルファ チャネル (A) と 3 つのカラー コンポーネント (RGB) の 4 つのコンポーネントによって各ピクセルが定義されます。 アルファ値が 0 のピクセルは完全に透明です。 アルファ値が 255 のピクセルは不透明です。 これらの値の間で、ピクセルはさまざまな透明度を持ちます。
DirectShow では、32 ビット RGB ビデオ用に 2 種類のメディアが定義されています。
- MEDIASUBTYPE_ARGB32: ビデオは、有効なアルファ チャネルを持つ 32 ビット RGB です。
- MEDIASUBTYPE_RGB32: ピクセルは 32 ビットですが、アルファ チャネルは必ずしも有効ではありません。
DES でアルファ ブレンドを実行するには、ビデオ グループの圧縮されていないメディアの種類をMEDIASUBTYPE_ARGB32に設定します。 C++ で、 IAMTimelineGroup::SetMediaType メソッドを呼び出します。 XTL 形式では、group 要素の bitdepth 属性を 32 に設定すると、これも実現されます。
次に、アルファ チャネルを含むビデオ データが必要です。 いくつかのオプションがあります。
- アルファ データを含む 32 ビット RGB ビデオが既にある AVI ファイルを使用できます。 現在、アルファは MPEG または Microsoft Windows Media Format (WMF) ソース ファイルではサポートされていません。
- DES では、アルファ データを含む 32 ビット ビットマップ (.bmp) ファイルと Targa (.tga) ファイルがサポートされています。
- アルファを使用して 32 ビット RGB データを作成するカスタム ソース フィルターを作成できます。 出力メディアの種類は MEDIASUBTYPE_ARGB32する必要があります。 フィルターは、タイムラインソース オブジェクトのサブオブジェクトとして使用します。
ビデオ ソースにアルファがない場合は、アルファ データを作成する効果を使用できます。 アルファ セッター効果は、イメージ全体のアルファ チャネルを定数値に設定します。 アルファを時間の経過と共に変化させるには、アルファ セッター効果を使用して IPropertySetter インターフェイスを使用します。 グループの圧縮されていないメディアの種類が MEDIASUBTYPE_ARGB32されている限り、元のソースは 32 ビットである必要はありません。
最後に、アルファ ブレンドを実行する効果または画面切り替えにビデオを渡します。 コンポジター画面切り替えではアルファ ブレンドが実行され、キー遷移はアルファ値でキーを設定できます。
次のサンプル XTL プロジェクトでは、アルファ ブレンドが実行されます。
<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>
関連トピック