Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Le app devono di tanto in tanto disegnare grafica a una destinazione, in cui tale destinazione non è destinata alla visualizzazione immediata. Questo tipo di disegno viene talvolta definito "rendering offscreen" o "disegno in una trama". Ciò è utile quando, ad esempio, l'output di un'app di un'operazione di disegno deve essere salvato in un file, restituito come matrice di pixel o usato come input per un'operazione successiva.
Win2D supporta questi scenari e sono semplificati con CanvasRenderTarget.
CanvasRenderTarget estende CanvasBitmape ha il metodo CreateDrawingSession(). Usare CreateDrawingSession disegnare il contenuto grafico in un oggetto CanvasRenderTarget. Ad esempio:
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);
}
Si noti che è presente una chiamata al metodo a Clear. Senza questo, la bitmap verrà inizializzata con contenuto non definito. Le sessioni di disegno create tramite CanvasRenderTarget sono diverse da quelle create nei controlli XAML di Win2D, in termini di Clear comportamento. I controlli vengono sempre cancellati automaticamente da Win2D quando viene creata una sessione di disegno. CanvasRenderTargets non sono. In questo modo, le app hanno la possibilità di apportare modifiche incrementali a CanvasRenderTarget-s ed evitare di ridisegnare un'intera scena ogni volta.
Per disegnare un oggetto CanvasRenderTarget in un'altra sessione di disegno, è sufficiente utilizzare DrawImage(ICanvasImage) o uno dei relativi overload. Ad esempio:
void canvasControl_Draw(CanvasControl sender, CanvasDrawEventArgs args)
{
args.DrawingSession.DrawImage(offscreen, 23, 34);
}
In alternativa, per usare un CanvasRenderTarget oggetto come input per un effetto, passarlo ovunque l'effetto si aspetta di usare come IGraphicsEffectSource origine. Ad esempio:
GaussianBlurEffect blurEffect = new GaussianBlurEffect()
{
Source = offscreen,
BlurAmount = 3.0f
};
Un'app può chiudere e riaprire le sessioni di disegno in modo CanvasRenderTarget arbitrario più volte.
Le operazioni di disegno non vengono sottoposte a commit nell'oggetto CanvasRenderTarget finché l'oggetto sessione di disegno non viene eliminato. In C# un using blocco può organizzare questa operazione.
Vale la pena sottolineare che CanvasRenderTarget non è un controllo XAML e non implica affatto l'albero XAML. È adatto sia per le app XAML che per le app non basate su XAML.