3

Microsoft から親切に提供されたデスクトップ複製 API サンプルを変更して、画面をキャプチャし、ネットワーク経由でアプリケーションに更新を送信します。実際にデータを送信する方法を知っています。私の問題は、ID3D11Texture2D オブジェクトからデータを取得することです。

ID3D11Texture2D* m_AcquiredDesktopImage;
IDXGIResource* desktopResource = nullptr;
DXGI_OUTDUPL_FRAME_INFO FrameInfo;

// Get new frame
HRESULT hr = m_DeskDupl->AcquireNextFrame(500, &FrameInfo, &desktopResource);

// QI for IDXGIResource
hr = desktopResource->QueryInterface(__uuidof(ID3D11Texture2D), reinterpret_cast<void **>(&m_AcquiredDesktopImage));

この時点で、画面の更新は にあると思いますm_AcquiredDesktopImage。このデータを有線で (できるだけ効率的に) 送信する必要があります。

この答えは正しい方向に進んでいるようですが、私は Windows プログラミングが初めてなので、追加のヘルプが必要です。

これは私が想像できる唯一の解決策ですIDXGIObject::GetPrivateData

4

2 に答える 2

2

個人データは、あなたが探しているものではありません。カスタム値を d3d オブジェクトにアタッチするためだけに存在します。

ID3D11Texture2Dイメージを読み戻す必要があるオブジェクトを取得したら、ステージング メモリ プールに 2 つ目のオブジェクトを作成する必要がありますID3D11Device(元の説明を取得し、プールを変更し、バインディングを削除します)。

ID3D11DeviceContext次に、 を使用してテクスチャをステージング テクスチャにコピーする必要がありますCopyResource。次に、コンテキストMapUnmapAPI を使用して画像を読み取ることができます。

于 2016-07-03T03:12:00.597 に答える