0

動画に透かしを入れたいです。DirectShow フィルターを使用することは可能ですか。動画にチャンネルロゴのような画像を重ねたい。ビデオの再生時に画像が固定されるようにします。

貴重なヘルプやサンプルを提供してください (VC++)

4

1 に答える 1

2

私は前にこれをしました。2つのオプションがあります。

  1. VMR-7またはVMR-9のミキサー機能を使用します。VMRフィルターはアルファブレンディングをまったく実行できないため、これは本当に醜いように見えることを保証します。透かしのエッジは粗くなります。

  2. 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である可能性があります。

于 2010-04-06T05:06:16.260 に答える