4

编辑:

他们在最后一次构建中删除了 CompositionImage ...


我想知道 Win2DCanvasBitmap和 Microsoft.UI.Composition之间的区别CompositionImage

在这两种情况下,我都能够显示图像,但我真的不知道/理解这两种方法之间的区别。


CanvasBitmap方法:

XAML:

<xaml:CanvasControl Draw="OnDraw"  />

代码:

private void Onraw(CanvasControl sender, CanvasAnimatedDrawEventArgs e)
        {
           var image = await CanvasBitmap.LoadAsync(...);
           e.DrawingSession.DrawImage(...);
        }

CompositionImage方法:

XAML:

 <Grid x:Name="Host" />

代码:

ContainerVisual rootVisual =  
        (ContainerVisual)ElementCompositionPreview.GetContainerVisual(this.Host);
Compositor compositor = rootVisual.Compositor;
CompositionGraphicsDevice device = compositor.DefaultGraphicsDevice,

CompositionImage image = device.CreateImageFromUri(...);

ImageVisual content = Compositor.CreateImageVisual();
content.Image = image;

rootVisual.Children.InsertAtTop(content);

有什么不同?最好的方法是什么?

为了把事情放在上下文中,我有一个显示很多小图像的应用程序。我需要应用程序内存不足并快速绘制图像。

谢谢,阿德里安。

4

2 回答 2

4

Win2D 基本上是对 directx 的简单 2D 包装器 - 如果您创建一个画布,您就有一个可以在其中绘制的 directx 上下文。

组合 API 让您可以与 XAML 和 DirectX 之间的层混合 - 这比 Win2D 高一点,而且“画布”是应用程序本身 :)

所以 Win2DCanvasBitmap就像Image在 XAML 中,而CompositionImage更像是ImageSource,因为您只能在视觉对象中使用它或作为效果源。


从技术上讲,您可以使用任何您想要或更容易使用的方法。请记住,组合 API 仅在 TH2 (1511) 版本之后的 Windows 10 中可用,因此如果您想支持 RTM(内部版本 10240),请使用 Win2D 解决方案。

于 2015-11-27T12:55:26.433 回答
2

这取决于...

CanvasControl 和 ImageVisual 在渲染成本方面非常相似。在 CPU 成本方面,ImageVisual 更轻量级。

但是,您可以在单个 CanvasControl(或 CanvasAnimatedControl)中显示大量 CanvasBitmaps - 因此,如果您希望显示由数百个位图组成的 2D 游戏之类的东西,那么 Win2D 可能是要走的路。

如果您想利用 Composition 的动画系统并将图像与 XAML 组件混合,那么 Composition 可能是您的最佳选择。

于 2015-12-01T19:07:05.783 回答