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, вероятно, поможет вам.