【问题标题】: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() 方法当前不足以完成您想要的。出于同样的原因,此时无法创建屏幕截图。但这些都是积压的事情!但是,现在你知道了。

      【讨论】:

        【解决方案4】:

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

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

        通过 nuget 安装:

        > Install-Package WinRTXamlToolkit.Composition
        

        添加使用:

        using WinRTXamlToolkit.Composition;
        

        渲染您的 xaml:

        var bitmap = await element.Render();
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-05-30
          • 1970-01-01
          相关资源
          最近更新 更多