動画に透かしを入れたいです。DirectShow フィルターを使用することは可能ですか。動画にチャンネルロゴのような画像を重ねたい。ビデオの再生時に画像が固定されるようにします。
貴重なヘルプやサンプルを提供してください (VC++)
動画に透かしを入れたいです。DirectShow フィルターを使用することは可能ですか。動画にチャンネルロゴのような画像を重ねたい。ビデオの再生時に画像が固定されるようにします。
貴重なヘルプやサンプルを提供してください (VC++)
私は前にこれをしました。2つのオプションがあります。
VMR-7またはVMR-9のミキサー機能を使用します。VMRフィルターはアルファブレンディングをまったく実行できないため、これは本当に醜いように見えることを保証します。透かしのエッジは粗くなります。
CTransInPlaceFilterから派生するフィルタークラスを実装します。
次のメソッドを実装します。
CheckMediaType (accept all RGB formats)
SetMediaType (accept all RGB formats)
Transform (this is where you do the overlay)
フィルタのコンストラクタ(またはグラフが実行される前に呼び出される他のメソッド)で、ファイルまたはリソースから透かしをロードします。画像ファイルのビットマップビットをバッファに保存します。
Transformが呼び出されたら、渡されたIMediaSampleをクラックして開き、そのバッファーにアクセスし、透かしの各ピクセルを画像のバッファーにコピーするための二重ネストforループを作成します。
これらすべての問題の1つは、入力ソースがネイティブRGBではない可能性があることです。たとえば、ほとんどのWebカメラはYUVソース(さらに悪いことに、MJPG)です。フィルタをRGBタイプのみを受け入れるように制約することにより、DShowカラーコンバータフィルタが強制的にロードされます。そのため、余分なレイテンシがグラフに追加される可能性があります。アルファブレンディング(必要な場合)については、ここで自分で行います。その上でブリットするソースバッファーは、アルファチャネルのないRGB24である可能性があります。