[DX 11.2] [XAML] [C ++] [DirectXTK] SaveWICTextureToFile和SwapChainPanel [英] [DX 11.2][XAML][C++][DirectXTK] SaveWICTextureToFile and SwapChainPanel

查看:437
本文介绍了[DX 11.2] [XAML] [C ++] [DirectXTK] SaveWICTextureToFile和SwapChainPanel的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述


我正在尝试使用DirectXTK的SaveWICTextureToFile实用程序来获取屏幕截图。我正在使用带有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);

// ... FileSavePicker等的模式代码。
}
}


我做错了什么?


谢谢,


Leszek





Wiki: wbswiki.com
网站: www.wisenheimerbrainstorm.com

解决方案

您好ata6502,


根据您的描述,此问题与DX有关。我将其移至DX相关论坛,以便您获得更好的支持。


感谢您的理解。


问候。


Hi,

I'm trying to use the SaveWICTextureToFile utility from DirectXTK to grab a screenshot. I'm using XAML with a SwapChainPanel element. Unfortunately, the method always saves a rectangle filled with solid color rather than the current screenshot. Every time I call the SaveWICTextureToFile method is saves a different color.

This is my code (somewhat simplified):

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.
    }
}

What am I doing wrong?

Thanks,

Leszek


Wiki: wbswiki.com
Website: www.wisenheimerbrainstorm.com

解决方案

Hello ata6502,

From your description, this issue is related with DX. I move it to the DX related forum so that you could get better support.

Thanks for your understanding.

Regards.


这篇关于[DX 11.2] [XAML] [C ++] [DirectXTK] SaveWICTextureToFile和SwapChainPanel的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆