【问题标题】:Win2D CanvasBitmap vs Microsoft.UI.Composition CompositionImageWin2D CanvasBitmap 与 Microsoft.UI.Composition CompositionImage
【发布时间】:2015-11-26 19:43:32
【问题描述】:

编辑:

他们在最后一次构建中删除了 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);

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

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

谢谢, 阿德里安。

【问题讨论】:

    标签: c# uwp win2d


    【解决方案1】:

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

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

    所以 Win2D 的CanvasBitmap 类似于 XAML 中的Image,而CompositionImage 更像ImageSource,因为您只能将其用于视觉对象或作为效果源。


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

    【讨论】:

      【解决方案2】:

      这取决于...

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

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

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

      【讨论】:

      • 我有一个显示很多小图像的应用程序,用户需要能够点击它。这是我唯一的要求。然后根据您的最后陈述,我可能需要组合方法。
      猜你喜欢
      • 2020-08-06
      • 1970-01-01
      • 2020-10-21
      • 1970-01-01
      • 1970-01-01
      • 2017-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多