Win2D CanvasBitmap против Microsoft.UI.Composition 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);

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

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

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


person pellea    schedule 26.11.2015    source источник


Ответы (2)


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

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

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


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

person Tamás Deme    schedule 27.11.2015

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

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

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

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

person Damyan    schedule 01.12.2015
comment
У меня есть приложение, которое отображает много маленьких изображений, и пользователь должен иметь возможность нажимать на него. Это единственное требование, которое у меня есть. Тогда, исходя из вашего последнего утверждения, мне, вероятно, понадобится подход композиции. - person pellea; 03.12.2015