Win2D CanvasBitmap vs Microsoft.UI.Composition CompositionIm

本文关键字:Composition CompositionIm UI Microsoft CanvasBitmap vs Win2D | 更新日期: 2023-09-27 18:24:42

编辑:

他们删除了上次构建中的CompositionImage


我想知道Win2D CanvasBitmap和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);

有什么区别?什么是最好的方法?

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

谢谢,阿德里安。

Win2D CanvasBitmap vs Microsoft.UI.Composition CompositionIm

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

合成API允许您与XAML和DirectX之间的层混合——这比Win2D高一点,而且"画布"是应用程序本身:)

因此,Win2D CanvasBitmap类似于XAML中的Image,而CompositionImage更类似于ImageSource,因为您只能在视觉或效果源中使用它。


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

这取决于。。。

CanvasControl和ImageVisual在渲染成本方面极其相似。就CPU成本而言,ImageVisual更轻。

然而,你可以在一个CanvasControl(或CanvasAnimatedControl)中显示大量的CanvasBitmap,所以如果你想显示由数百个位图组成的2D游戏,那么Win2D可能是最好的选择。

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