【问题标题】:Render control into image in WinRT metro在 WinRT Metro 中将控件渲染为图像
【发布时间】:2012-09-28 13:21:09
【问题描述】:
我正在为 Windows 8 Metro 创建一个应用程序,我需要将框架控件渲染为图像并将其保存到硬盘,但不知道如何操作。我可以为此使用 SharpDX 吗?我能怎么做?提前感谢您的帮助
【问题讨论】:
标签:
c#
windows-8
microsoft-metro
rendering
windows-runtime
【解决方案1】:
如果您不介意将依赖项添加到 SharpDX 程序集,justin.m.chase 的方法肯定有效。 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);
【解决方案2】:
如果您遵循this 线程,将解释 Metro 的局限性以及它无法工作的原因。它的本质是:
抱歉,将 Xaml 渲染到元素或捕获
您自己的应用程序没有进入发布版本。这是设计使然
一个应用程序无法捕获另一个应用程序的屏幕截图。
提到的解决方法是:
我的意思是 - 你可以使用
Direct2D。使用 XAML UI 绘制的相同形状。
我并不是要暗示您可以呈现 XAML 控件 - 仅此而已
您可以使用 Direct2D 作为替代方案来实现相同的结果,尽管
付出更多的努力。
【解决方案3】:
抱歉,这是不可能的。 WritableBitmap 类的 Render() 方法当前不足以完成您想要的。出于同样的原因,此时无法创建屏幕截图。但这些都是积压的事情!但是,现在你知道了。