Win2D CanvasBitmap против Microsoft.UI. Композиция CompositionImage

РЕДАКТИРОВАТЬ:

Они удалили 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);

Какая разница? Каков наилучший подход?

Чтобы поместить вещи в контекст, у меня есть приложение, которое отображает много маленьких изображений. Мне нужно, чтобы в приложении было мало памяти и быстро рисовать изображения.

Спасибо, Адриен.

2 ответа

Win2D - это простая 2D-оболочка над DirectX - если вы создаете холст, у вас есть контекст DirectX, в который вы можете рисовать.

API композиции позволяют вам смешиваться со слоем между XAML и DirectX - это немного более высокий уровень, чем Win2D, а также "canvas" - это само приложение:)

Итак, Win2D CanvasBitmap как Image в XAML, в то время как CompositionImage больше похоже ImageSourceпотому что вы можете использовать его только в визуальном или в качестве источника эффекта.


Технически вы можете использовать то, что захотите или вам будет проще. Помните, что API композиции доступны в Windows 10 только после версии TH2 (1511), поэтому, если вы хотите поддерживать RTM (сборка 10240), используйте решение Win2D.

Это зависит...

CanvasControl и ImageVisual очень похожи по стоимости рендеринга. С точки зрения стоимости процессора ImageVisual является более легким.

Тем не менее, вы можете отобразить большое количество CanvasBitmaps внутри одного CanvasControl (или CanvasAnimatedControl) - так что если вы хотите отобразить что-то вроде 2D-игры, состоящей из многих сотен битовых карт, тогда Win2D, вероятно, является подходящим вариантом.

Если вы хотите воспользоваться системой анимации Composition и смешать изображения с компонентами XAML, тогда Composition, вероятно, поможет вам.

Другие вопросы по тегам