私はDirect Xが初めてですが、Windowsデスクトップ複製APIを使用してビデオをキャプチャすることに成功しました。 APIを使用すると、カーソル画像の位置、高さ、幅、および生のピクセルデータ(システムメモリ内)を含むマウスカーソル情報を取得することもできます。マウスカーソルは、キャプチャされたスクリーンイメージ上にデフォルトで描画されないため、手動で処理する必要があります。ID3D11Texture2Dを適切なアルファベットでコピーする
私はこのマウスカーソルデータをメインスクリーンキャプチャ画像に「コピー」して、表示可能なマウスカーソルで単一の画像を作成しようとしています。これまでは、カーソルピクセルデータからID3D11Texture2D
を作成し、ID3D11DeviceContext::CopySubresourceRegion
を実行してカーソルをメイン画面にコピーし、ID3D11Texture2D
として保存して、カーソルを表示させることができました。メイン画面の画像テクスチャは常にDXGI_FORMAT_B8G8R8A8_UNORM
形式であり、生カーソルピクセルデータseems to be in the same format(少なくともDXGI_OUTDUPL_POINTER_SHAPE_TYPE_COLOR
シェイプの場合)です。
私の現在の問題はこのコピーのアルファ処理に関連しているようです。カーソルが表示されますが、四角形がコピーされると、カーソルを囲むアルファが黒で塗りつぶされます。次のような例があります:Black border around mouse また、最終的なテクスチャがビデオメモリからビデオエンコーダにまっすぐ進むので、これはビデオメモリで発生することが重要です。
CopySubresourceRegion
が仕事に適したツールでない場合は、私の方法を変更したいと思います。どのように私は適切なアルファとメイン画面のイメージテクスチャにこのカーソルを取得することができます上の任意のアイデア?
が、述べ価値明示的に 'CopySubresourceRegion'はアルファブレンディングを行いません。代わりに、単純な長方形のコピーを行い、宛先(アルファを含む)のすべてのチャンネルを上書きします。黒に見える理由は、ソーステクスチャがカーソル領域の外にある{0,0,0,0}である可能性が高いか、または透明な黒であるためです。表示すると、アルファチャンネルは表示のために無視され、不透明な黒色になります。 – MooseBoys
ありがとう、私はこれに着手しています。成功した実装の後、私は受け入れのために戻ってきます。 – chrisd1100