使用DirectXTK保存WITTextureToFile和SwapChainPanel

时间:2016-03-01 01:51:37

标签: c++ windows windows-runtime directx-11

我正在尝试使用DirectXTK中的SaveWICTextureToFile方法在我的Windows应用商店应用中获取屏幕截图(Windows 8.1)。我正在使用带有SwapChainPanel元素的XAML。不幸的是,该方法总是保存一个填充了纯色而不是当前屏幕内容的屏幕大小的矩形。每次调用SaveWICTextureToFile方法时,它都会保存不同的颜色。

这是我的代码(简化):

void DirectXPage::SaveButton_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
    critical_section::scoped_lock lock(m_main->GetCriticalSection());

    auto folder = Windows::Storage::ApplicationData::Current->TemporaryFolder;

    WCHAR fname[_MAX_PATH];
    wcscpy_s(fname, folder->Path->Data());
    wcscat_s(fname, L"\\screenshot.png");

    auto context = m_deviceResources->GetD3DDeviceContext();
    auto swapChain = m_deviceResources->GetSwapChain();

    ID3D11Texture2D* backBuffer = nullptr;
    HRESULT hr = swapChain->GetBuffer(0, __uuidof(*backBuffer), (LPVOID*)&backBuffer);
    if (SUCCEEDED(hr))
    {
        HRESULT hr = SaveWICTextureToFile(context, backBuffer, GUID_ContainerFormatPng, fname);

        DX::ThrowIfFailed(hr);

        // ... mode code for FileSavePicker etc.
    }
}

我做错了什么?

谢谢,

莱谢克

0 个答案:

没有答案