プロが教える店舗&オフィスのセキュリティ対策術

はじめて質問させていただきます。

今、静止画と動画を重ね合わせて表示を行なうということをやっているのですが、どうにもうまくできません。

あるソフトのプラグインを作っているのですが、そのソフトのフレームで表示した静止画はDirectShowのビデオミキシングレンダーのVMRALPHABITMAP構造体を使用して合成ができました。

そこで新たにOpenGLの描画したウィンドウの画像を利用して合成を行なおうとしています。

OpenGLの表示はあるフレームの上から表示するようにしています。

OpenGLのglReadPixelsを利用すればいいのかとも思ったのですが、いまいちよくわかりません。

ちょっとわかりにくい質問ですが、よろしくお願いします。

A 回答 (3件)

OpenGLのレンダリングコンテキストが表示されている別ウィンドウを作って、SetLayeredWindowAttributes等

で単色カラーキーの透過ウィンドウにして、ウィンドウレベルで無理矢理重ねるという逃げ方は無しですか?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
その方法もあるとは思いますが、さすがにウィンドウを動かすというのはちょっとって感じです。
ありがとうございます。

お礼日時:2006/10/25 16:41

レンダリングコンテキスト作成時、SetPixelFormatに


PFD_DRAW_TO_WINDOW を指定しているのをPFD_DRAW_TO_BITMAPにして
一旦Bitmapにしたものを重ねていてはいかがでしょうか?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
PFD_DRAW_TO_BITMAPにするのは思いつきませんでした。

しかし一旦Bitmapにしたものをどう扱っていいのかがよくわかりません。
そのビットマップはレンダリングコンテキストに作られるのですよね??
VMRALPHABITMAP構造体ではBitmapのハンドラ(HBITMAP)を指定するのですが、そのレンダリングコンテキストのどこを指定すればいいのでしょうか?
そのレンダリングコンテキストのBitmapからまた何か作成するのでしょうか??

素人質問ばかりで申し訳ございませんが、よろしくお願いします。

お礼日時:2006/10/25 16:47

すみません。

私はDirectShowでそのようなことをやったことが無いので詳しく説明できませんが、mattyun26さんがすでに違う方法(ビットマップやビットデータがあれば)合成できると思っていました。^^;

とりあえず私が言ったのは、オフスクリーンレンダリングという手法で、メモリDCに対してレンダリングするものです。
これは、あらかじめ、メモリDC(ビットマップはDIB)で作成しておき、そのDCを使用して、wglMakeCurrentなどを呼び出します。
レンダリング終了じにはこのDIBにレンダリング結果が入っていますので、そのままHBITMAPとして使用するかbitsをなめてデータを取得するかになると思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!