Dans une application win8, comment obtenir une drawingession à partir d'un canvascontrol (win2d), ou, comment dessiner une image sur canvascontrol à partir de la fonction: canvasControl_Draw.comment obtenir une drawingession à partir d'un canvascontrol (win2d)
Répondre
Vous ne pouvez pas - ceci est une partie clé de la politique fournie par CanvasControl.
Cela garantit que:
le drawingsession est créé et fermé au moment opportun
- dessin
n'est pas tentée avant que les ressources ont été créés
- dispositif de manutention
erreurs sont perdues manipulé
Si vous voulez forcer un rafraîchissement, vous pouvez utiliser CanvasControl.Invalidate(). Alternativement, vous pouvez trouver que vous voulez rendre à un CanvasRenderTarget hors écran (que vous pouvez appeler CreateDrawingSession). Utilisez ensuite DrawImage dans votre CanvasControl_Draw pour dessiner la cible de rendu sur le contrôle.
Si votre objectif consiste simplement à afficher une image, vous pouvez le faire sans être dans la méthode CanvasControl.Draw. Voici un code d'une de mes applications qui affiche une image et l'enregistre dans un fichier (PageRenderer est ma classe qui fait le rendu):
public async Task GenerateThumbnailAsync(IRandomAccessStream stream, int width, int height, CanvasBitmapFileFormat imageType)
{
CanvasDevice device = CanvasDevice.GetSharedDevice();
PageRenderer renderer = new PageRenderer(device);
using (CanvasRenderTarget offscreen = new CanvasRenderTarget(device, width, height, 96))
{
using (CanvasDrawingSession ds = offscreen.CreateDrawingSession())
{
ds.Clear(Colors.Black);
renderer.DrawPage(ds);
}
await offscreen.SaveAsync(stream, imageType);
}
}