在WinRT C#中,如何使用RenderTargetBitmap保存屏幕外XAML树
本文关键字:屏幕 保存 XAML RenderTargetBitmap 何使用 WinRT | 更新日期: 2023-09-27 18:28:57
以下代码从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:在屏幕外创建WPF元素并渲染到位图
更新:
到目前为止,我最好的想法是将我想渲染的画布放在当前可见的页面中,但将其放在通常填充屏幕的根UIElement下面,这样用户就看不到它了:
<Grid>
<Canvas x:Name="HiddenCanvas"/>
<Grid x:Name="mainElement" Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
</Grid>
</Grid>
它不漂亮,但似乎很管用。让我们看看是否有人能做得更好
satur9nine将渲染的UI树放在不透明前景后面的解决方案似乎是唯一受支持的解决方案。您也可以篡改父元素的不透明度,以避免它出现。另一种选择是用Direct2D自己渲染,或者使用类似于WinRT XAML Toolkit中的WinRTXamlToolkit.Composition.Render()
方法。
WinRTXamlToolkit.Composition
命名空间具有此扩展。只需调用此方法:
await WriteableBitmapRenderExtensions.RenderToPngStream(element);