2017-06-02 33 views
1

私は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機能でエラーが発生します。 誰かが私に行方不明を教えてもらえますか?または解像度を簡単にカスタマイズするソリューションはありますか? ありがとう

答えて

1

Desktop Duplication APIはデスクトップのコピーを最小のオーバーヘッドでテクスチャとして取得します。つまり、スケーリングは含まれません。あなたはフレームをつかんで望みどおりに縮小することができますが、これはDesktop Duplicationがあなたのためにやることではありません。

この質問は、いくつかの方法を提案している(と質問もデスクトップ複製に関連している):

をさらに、あなたが使用することができ、やや柔軟性に欠けるし、持っているメディア財団のVideo Processor MFT、それ以外の場合はMedia Foundationを使用しない場合は不便なフォームファクタですが、効率的な方法でDirect3D 11を使用してスケールを適切に設定してください。

はGPU対応のスケーリングのための他の関連するAPIにも参照してください:

+0

は、あなたの答えをありがとう!問題は、AcquireNextFrameでDirtyRectとMoveRectを取得していることです。そして私はデスクトップの初期解像度からそれを得ています。だから私がtexture2Dをスケールすると、Dirty&Move Rectは新しいスケーリングされたテクスチャと同期しません...それは大きな問題です。それで、私はすでに出力を拡大することを求めていたのですが... Microsoftがそれについて考えなかったのはあまりにも悪いです... – DevAndroid

+0

テクスチャを拡大/縮小すると、それぞれ矩形を拡大縮小できますか? Desktop Duplicationは十分な入力を提供し、データをさらに処理するために必要なすべてを備えています。 –

+0

はい、そうです。私は正しい計算をしなければなりません。不可能ではない。 真実を伝えるために、私はまだテクスチャをスケールすることに成功していません...私はSharpDXを使うべきですか?これを正しく行うための手順を示すチュートリアルはありません。 – DevAndroid

関連する問題