Desenho fora da tela

Ocasionalmente, os aplicativos precisam desenhar gráficos em um destino, onde esse destino não se destina à exibição imediata. Esse tipo de desenho às vezes é chamado de "renderização fora da tela" ou "desenho em uma textura". Isso é útil quando, por exemplo, a saída de um aplicativo de uma operação de desenho deve ser salva em um arquivo, retornada como uma matriz de pixels ou usada como entrada para uma operação posterior.

O Win2D oferece suporte a esses cenários e eles são facilitados com CanvasRenderTargeto .

CanvasRenderTarget estende CanvasBitmap, e tem o método CreateDrawingSession(). Use CreateDrawingSession para desenhar conteúdo gráfico em um CanvasRenderTargetarquivo . Por exemplo:

CanvasDevice device = CanvasDevice.GetSharedDevice();
CanvasRenderTarget offscreen = new CanvasRenderTarget(device, width, height, 96);

using (CanvasDrawingSession ds = offscreen.CreateDrawingSession())
{
    ds.Clear(Colors.Black);
    ds.DrawRectangle(100, 200, 5, 6, Colors.Red);
}

Observe que há uma chamada de método para Clear. Sem isso, o bitmap será inicializado com conteúdo indefinido. As sessões de desenho criadas por meio CanvasRenderTarget são diferentes daquelas criadas nos controles XAML do Win2D, em termos de Clear comportamento. Os controles são sempre limpos automaticamente pelo Win2D quando uma sessão de desenho é criada. CanvasRenderTargets não são. Dessa forma, os aplicativos têm a capacidade de fazer alterações incrementais em CanvasRenderTarget-s e evitar redesenhar uma cena inteira todas as vezes.

Para desenhar um CanvasRenderTarget para outra sessão de desenho, basta usar DrawImage(ICanvasImage) ou uma de suas sobrecargas. Por exemplo:

void canvasControl_Draw(CanvasControl sender, CanvasDrawEventArgs args)
{
    args.DrawingSession.DrawImage(offscreen, 23, 34);
}

Ou, para usar a CanvasRenderTarget como entrada para um efeito, passe-o para onde o efeito espera usar an IGraphicsEffectSource como fonte. Por exemplo:

GaussianBlurEffect blurEffect = new GaussianBlurEffect()
{
    Source = offscreen,
    BlurAmount = 3.0f
};

Um aplicativo pode fechar e reabrir sessões de desenho arbitrariamente CanvasRenderTarget várias vezes.

As operações de desenho não são confirmadas CanvasRenderTarget até que o objeto da sessão de desenho seja descartado. Em C#, um using bloco pode organizar isso.

Vale ressaltar que CanvasRenderTarget não é um controle XAML e não envolve a árvore XAML. Ele é adequado para aplicativos baseados em XAML e não baseados em XAML.