如何使用RenderTargetBitmap?

时间:2016-01-25 10:25:08

标签: windows-runtime win-universal-app c++-cx rendertargetbitmap

在Windows通用应用程序(WinRT)应用程序中,我试图捕获当前页面(或其中一部分)的位图图像。

谷歌搜索表明我应该使用Windows :: UI :: Xaml :: Media :: Imaging :: RenderTargetBitmap(更具体地说,它的方法RenderAsync())来捕获屏幕。

在一个小型示例应用程序中,我因此添加了此代码(C ++):

auto pclRenderTargetBitmap = ref new Windows::UI::Xaml::Media::Imaging::RenderTargetBitmap;
Concurrency::create_task(pclRenderTargetBitmap->RenderAsync(pclElem,100,100)).then([&]() {
  // handling code here
});

(pclElem是一个FrameworkElement,更具体地说是一个canvas,并且不是null)

当我执行此代码时,确实创建了任务,但是从未调用“then”中的lambda。就像RenderAsync()永远不会终止一样。

有没有人有在C ++中使用此功能的经验?我错过了什么?

感谢您的回答。

1 个答案:

答案 0 :(得分:0)

感谢Andy Rich的回答。 问题是pclRenderTargetBitmap超出了范围。 这可以通过将值传递lambda参数来解决:

auto pclRenderTargetBitmap = ref new  Windows::UI::Xaml::Media::Imaging::RenderTargetBitmap;
Concurrency::create_task(pclRenderTargetBitmap->RenderAsync(pclElem,100,100)).then([=]() {
      // handling code here
});