在WinRT地铁中将控制渲染为图像

我正在为windows 8 metro创建一个应用程序,我需要将一个框架控件渲染到一个图像中并将其保存到硬盘但不知道如何。 我可以使用SharpDX吗? 我能怎么做? 在此先感谢您的帮助

如果您遵循此主题,将解释Metro的局限性及其无法解决的原因。 它的本质是:

抱歉,将Xaml呈现为元素或捕获您自己的应用程序的屏幕截图并没有进入发布版本。 根据设计,应用程序无法捕获另一个应用程序的屏幕截图。

提到的解决方法是:

我的意思是 – 你可以使用Direct2D绘制形状,文字和图像。 您使用XAML UI绘制的相同形状。 我并不是说你可以渲染XAML控件 – 只是你可以使用Direct2D作为替代方法来实现相同的结果,尽管需要付出更多的努力。

justin.m.chase的方法肯定有用,如果你不介意向SharpDX程序集添加依赖项。 RenderTargetBitmap类可能非常适合您要完成的任务。

// Render XAML to bitmap var bitmap = new RenderTargetBitmap(); await bitmap.RenderAsync(elementToRender); // get the pixels IBuffer pixelBuffer = await bitmap.GetPixelsAsync(); byte[] pixels = pixelBuffer.ToArray(); // write the pixels to a InMemoryRandomAccessStream var stream = new InMemoryRandomAccessStream(); var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.BmpEncoderId, stream); encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Straight, (uint)bitmap.PixelWidth, (uint)bitmap.PixelHeight, 96, 96, pixels); await encoder.FlushAsync(); stream.Seek(0); 

我很抱歉这是不可能的。 WritableBitmap类的’Render()方法目前还不足以完成您想要的任务。 出于同样的原因,此时无法创建屏幕截图。 但这些都是积压的东西! 但是,现在你知道了。

因为我认为这是一个更正确的答案,我想重申Zeeshan在原始问题中所做的评论。

在winrt xaml工具包中有一个扩展方法。 http://winrtxamltoolkit.codeplex.com/…/WriteableBitmapRenderExtensions.cs

通过nuget安装:

 > Install-Package WinRTXamlToolkit.Composition 

添加使用:

 using WinRTXamlToolkit.Composition; 

渲染你的xaml:

 var bitmap = await element.Render();