アルファチャンネルを解釈して半透明にして再生する動画プレーヤーを作ってみました。Windows Vista 以降用。
説明するのも面倒なので実例をば。以下の映像は MMD の配布セットに入っている サンプル(きしめんAllStar).pmm を、ステージを非表示にしてアルファチャンネル付きで出力したものです。ステージを非表示にしたので、ステージだったところは透明になります。
アルファチャンネルを解釈しているので、壁紙の Windows ロゴがそのまま見えます。上に貼ったのは静止画なのでアレですが、ちゃんと動画として再生されています。
普通のプレーヤーはアルファチャンネルを解釈しないので、透明のはずのところは白や黒で表示されます。以下の画像は Windows Media Player で同じ映像の同じ場面を表示させたものです。
なお、アルファチャンネルを含まない動画を Ut Alpha Video Player で再生した場合、そもそも再生できないか、透明度が無茶苦茶になって(ランダム、全部透明、全部不透明、など)表示されます。そういうもんです。
とりあえず目的とするところが正常に動くレベルになった程度なので、他の必要そうな機能は実装されていません。シークバー、アルファ値の解釈(ストレートか乗算済みか)、背景の選択、エラー時のダイアログ、あたりが必要なのではないかと思います。ただし、普通のメディアプレーヤーを作るつもりはないので、プレイリストとかそういうのは実装しません。
何の役に立つの?と聞かれるとアレですが、まあ出力した素材映像のデバッグにでも使ってください。
あと、がんばって説明動画を作成中です。
以下は技術的なところ。
このソフトウェアは Vista 以降で使える Desktop Window Manager の機能を使っています。XP にも半透明機能はありますが、非クライアント領域も自力で描画しなければならず、超めんどくさいのでやめときました。
DWM で半透明機能をオンにすると、描画内容についてアルファチャンネルが解釈されるようになります。動画ファイルからアルファチャンネル付きでフレームを受け取り、それをそのまま描画すると、Windows が半透明処理を全部やってくれます。(実際にはストレートアルファを乗算済みアルファに変換する処理を自前で書いている)
no comment untill now