私はAcquireNextFrame
を使用して私のデスクトップのスクリーンショットを作成しています。セットアップで必要な出力イメージのディメンションを設定することは可能ですか? 私はこの機能を助けてくれるこの機能IDXGIOutput::SetDisplaySurface
を見ました。ここ は私のコードは次のとおりです。カスタム出力解像度DuplicateOutput DXGI
//Here I init a output texture with less resolution
D3D11_TEXTURE2D_DESC desc;
desc.Width = 1280;
desc.Height = 720;
desc.MipLevels = desc.ArraySize = 1;
desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
desc.SampleDesc.Count = 1;
desc.Usage = D3D11_USAGE_DYNAMIC;
desc.BindFlags = 0;
desc.CPUAccessFlags = D3D11_CPU_ACCESS_READ | D3D11_CPU_ACCESS_WRITE;
desc.MiscFlags = 0;
ID3D11Texture2D *pTexture = NULL;
gDevice->CreateTexture2D(&desc, NULL, &pTexture);
IDXGISurface *surface = nullptr;
hr = gDevice->QueryInterface(__uuidof(IDXGISurface), reinterpret_cast<void **>(&pTexture));
if (FAILED(hr))
return;
// Here I should make lDxgiOutput->setDisplaySurface(surface)
hr = lDxgiOutput->GetDesc(&gOutputDesc);
if (FAILED(hr))
return;
IDXGIOutput1 *lDxgiOutput1 = nullptr;
hr = lDxgiOutput->QueryInterface(IID_PPV_ARGS(&lDxgiOutput1));
if (FAILED(hr))
return;
lDxgiOutput->Release();
hr = lDxgiOutput1->DuplicateOutput(gDevice, &gDeskDupl);
if (FAILED(hr))
return;
私の画面は1920×1080であると私は、例えば1280×720の画像を取得したいと思います。 queryinterface
機能でエラーが発生します。 誰かが私に行方不明を教えてもらえますか?または解像度を簡単にカスタマイズするソリューションはありますか? ありがとう
は、あなたの答えをありがとう!問題は、AcquireNextFrameでDirtyRectとMoveRectを取得していることです。そして私はデスクトップの初期解像度からそれを得ています。だから私がtexture2Dをスケールすると、Dirty&Move Rectは新しいスケーリングされたテクスチャと同期しません...それは大きな問題です。それで、私はすでに出力を拡大することを求めていたのですが... Microsoftがそれについて考えなかったのはあまりにも悪いです... – DevAndroid
テクスチャを拡大/縮小すると、それぞれ矩形を拡大縮小できますか? Desktop Duplicationは十分な入力を提供し、データをさらに処理するために必要なすべてを備えています。 –
はい、そうです。私は正しい計算をしなければなりません。不可能ではない。 真実を伝えるために、私はまだテクスチャをスケールすることに成功していません...私はSharpDXを使うべきですか?これを正しく行うための手順を示すチュートリアルはありません。 – DevAndroid