1

ストリーミング ビデオが描画される 1 つのウィンドウを含む activeX コントロールがあります。さまざまな方法で透明または半透明にした別のウィンドウで作成した別のダイアログがあります (つまり、SetLayeredWindowAttributes(...) をダイアログの Layered プロパティ [アルファ ブレンディング用] と一緒に使用するか、透明を設定します)。財産)。

さらに、さまざまな方法を使用して、ダイアログのウィンドウが常にストリーミングビデオウィンドウの上に描画されるようにしようとしましたが、うまくいくとは証明されていません。ダイアログにボタンがある場合、または LineTo(...) 呼び出しで透明な表面に描画する場合、それらはビデオの上に残りません。SetWindowPos を使用して 2 つのウィンドウの z オーダーに影響を与えようとしましたが、「TopMost」などのダイアログ ウィンドウのプロパティを変更しようとしましたが、役に立ちませんでした。

ストリーミング ビデオにオーバーレイされたウィンドウに対してこのようなことを試み、ストリーミング ビデオの後に常にフロント ウィンドウを描画するために z オーダーを取得した人はいますか?

更新: 02/10/10 - LWA_COLORKEY を使用して SetLayeredWindowAttributes(...) で WS_EX_LAYERED プロパティを使用してみましたが、私が探していたものを達成しました。階層化されたプロパティは WS_CHILD スタイルでは使用できないため、このソリューションでは、ビデオを含むウィンドウに対するオーバーレイ ウィンドウの位置を管理する必要があります。さらに、私が排除しようとしている他の奇妙な点がいくつかあります。たとえば、ビデオを含む ActiveX コントロール ウィンドウが IE タブに埋め込まれていて、別のタブに切り替えると、オーバーレイ ウィンドウのコントロールが新しいタブの上に残ります (WS_POPUP スタイルが使用されている場合)。これに対処する代替手段があるかどうかをまだ調査してから、スイッチを決定し、ウィンドウの可視性を非表示にします。

4

2 に答える 2

0

LWA_COLORKEY を使用して SetLayeredWindowAttributes(...) を指定した WS_EX_LAYERED プロパティは、カラーキーが使用されている場所で透過性を実現します。透明なオーバーレイはビデオの前に残り、アクティブなストリーミング ビデオはライブのままです。WS_CHILD スタイルはレイヤード スタイルでは使用できないため、WS_POPUP を使用する場合はウィンドウの位置を追加で管理する必要があります。オーバーレイを子ウィンドウとして使用できないことから、追加の問題が発生する場合があります。- Q 更新を参照してください。

于 2010-02-11T22:37:13.373 に答える
0

これは不可能かもしれません。ビデオ出力コードの多くはハードウェア オーバーレイを使用しているため、ウィンドウが前面にある場合、オーバーレイは機能しないか、ピクセルがまったくない場所に描画されません。

ハードウェア オーバーレイを使用すると、ビデオ描画コードが現在の表示形式以外の形式でフレームを表示できるようになり、CPU とメモリの帯域幅を大幅に節約できます。

私の経験では、多くのビデオ圧縮形式が YUV に基づいているため、オーバーレイは通常、RGB ではなく YUV 形式です。そのため、ビデオ ハードウェアはスクリーン バッファからではなく YUV 画像からピクセルを取得しているため、ビデオ ストリームのレンダリング コード パスに挿入しない限り、これらのピクセルに影響を与えることはできません。

于 2010-02-01T21:21:36.703 に答える