【问题标题】:In WinRT C# how do I save an offscreen XAML tree using RenderTargetBitmap?在 WinRT C# 中,如何使用 RenderTargetBitmap 保存屏幕外 XAML 树?
【发布时间】:2013-08-27 12:10:39
【问题描述】:

以下代码从 RenderAsync 方法抛出一个神秘的 System.ArgumentException “值不在预期范围内”。另一方面,如果我的 Canvas 是可见 XAML 树的一部分,它就可以工作。是不是不能渲染一些不显示在屏幕上的 XAML?

Canvas c = new Canvas();
c.Width = 40;
c.Height = 40;
c.Background = new SolidColorBrush(Color.FromArgb(0xff, 0x80, 0xff, 0x80));

RenderTargetBitmap x = new RenderTargetBitmap();
await x.RenderAsync(c);

我几乎认为这个答案会起作用,但没有运气,我猜它只适用于 WPF:Create WPF element offscreen and render to bitmap

更新:

到目前为止,我最好的想法是将要渲染的 Canvas 放入当前可见的页面中,但将其放置在通常填充屏幕的根 UIElement 下方,以便用户看不到它:

<Grid>
    <Canvas x:Name="HiddenCanvas"/>
    <Grid x:Name="mainElement" Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
    </Grid>
</Grid>

它并不漂亮,但它似乎工作。让我们看看是否有人可以做得更好

【问题讨论】:

    标签: c# windows-runtime windows-store-apps winrt-xaml windows-8.1


    【解决方案1】:

    satur9nine 将渲染的 UI 树放在不透明前景后面的解决方案似乎是唯一受支持的解决方案。您还可以调整父元素的不透明度以避免它出现。另一种选择是使用 Direct2D 自己渲染它,或者使用 WinRT XAML 工具包中的 WinRTXamlToolkit.Composition.Render() 方法。

    【讨论】:

      【解决方案2】:

      WinRTXamlToolkit.Composition 命名空间有这个有效的扩展。只需调用此方法:

      await WriteableBitmapRenderExtensions.RenderToPngStream(element);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-23
        • 2017-07-28
        • 2019-05-19
        • 1970-01-01
        相关资源
        最近更新 更多