どのように私は、透明窓ダイアログを取得し、ストリーミングビデオを描いているウィンドウの上部に残るためにプリミティブを描画するのですか?

StackOverflow https://stackoverflow.com/questions/2180125

質問

私はそれに描画されているビデオをストリーミングしている一つのウィンドウが含まれているActiveXコントロールを持っています。私は、ダイアログの[アルファブレンディングのための層状特性を有する透明または透明の設定に沿って(すなわち、... SetLayeredWindowAttributesを(使用)は、透明または半透明の様々な方法でなされていることを別のウィンドウ内に作成することを別のダイアログを有しますプロパティ)。

また私は、ダイアログが常にストリーミングビデオウィンドウが、どれもの上に描画するためのウィンドウを取得しようとする様々な方法を使用することを試みたが、私のために仕事に証明しています。私は、ダイアログ上のボタンを持っているか、LINETO(...)で透明な表面上に描画した場合、彼らはビデオの上に残らない呼び出します。私は2つのウィンドウのz順序に影響を与えるために使用SetWindowPosしようとしたともなく、無駄で、このような「TopMostの」などのダイアログウィンドウのプロパティを変更しようとしています。

誰ストリーミングビデオの上にオーバーレイウィンドウのために、このような何かをしようとしたストリーミングビデオの後に必ずフロントウィンドウの塗装で仕事をするのz順序を得ていますか?

UPDATE:02/10/10 - LWA_COLORKEYを使用して(...)SetLayeredWindowAttributesでWS_EX_LAYEREDプロパティを使用してみましたし、私が探していたものを達成しました。層状のプロパティは、WS_CHILDスタイルで使用することはできませんので、この解決策は、ビデオでウィンドウに対するそれとオーバーレイウィンドウの位置のいくつかの必要な管理をもたらします。さらに、私は排除しようとしている他のいくつかの奇妙があります。ビデオでのActiveXコントロールウィンドウがIEのタブに埋め込まれたと私はオーバーレイウィンドウ上の別のタブコントロールに切り替えされている場合たとえば、上に残る(WS_POPUPスタイルを使用)新しいタブ。この他には、スイッチを決定し、ウィンドウvisabilityを隠すを扱うための代替手段があるだろう場合は、まだ調査しています。

役に立ちましたか?

解決 2

SetLayeredWindowAttributesとWS_EX_LAYEREDプロパティ(...)カラーキーが使用されている場所で、透明性を達成するLWA_COLORKEYを使用。 Transpaerentオーバーレイは、ビデオの前に残り、アクティブストリーミングビデオは、ライブのまま。 WS_CHILDスタイルはレイヤードスタイルで使用することはできませんし、WS_POPUPが使用されている場合ので、窓の位置は、追加の管理が必要です。追加の問題は、子ウィンドウとしてオーバーレイ持つことができないことから生じる可能性があります。 -see Qアップデートます。

他のヒント

このはできないことがあり、ビデオ出力コードの多くは、ハードウェアオーバーレイを使用していますので、あなたのウィンドウが前面に表示されている場合は、オーバーレイは動作しませんか、あなたのピクセルがすべてであるところ描画しません。

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top