アルファ ブレンディング

ここでは、Microsoft® DirectShow® 編集サービス (DES) におけるアルファ ブレンディングについて説明する。

アルファは、ピクセルまたはイメージの透明度を示す。32 ビット非圧縮 RGB ビデオでは、アルファ チャンネル (A) および 3 つのカラー コンポーネント (RGB) から成る、4 つのコンポーネントによって各ピクセルが定義される。アルファ値がゼロのピクセルは完全に透明であり、アルファ値が 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">
    <!-- アルファ セッター エフェクト。 -->
    <effect clsid="{506D89AE-909A-44f7-9444-ABD575896E35}" start="0" stop="6">
      <param name="alpha" value="255">
        <linear time="6" value="0" />
      </param>
    </effect>
  </clip>
  <!-- アルファ キーイングを使うキー トランジション。 -->
  <transition clsid="{C5B19592-145E-11d3-9F04-006008039E37}" start="0" stop="6">
    <param name="KeyType" value="3" />  
  </transition>
</track>
</group>
</timeline>

表示: