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基本上是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可能是你的选择。