Je crée un programme ressemblant à de la peinture en utilisant Win2D. Mon CanvasControl
contient du texte, des images et certaines lignes que l'utilisateur a dessinées. Je veux enregistrer tout le contenu de ce CanvasControl
en tant que fichier sur le disque (dans n'importe quel format d'image standard). Je veux faire cela comme je veux l'afficher (à un moment ultérieur) à l'intérieur d'un contrôle Image
standard.Comment enregistrer le contenu de CanvasControl en tant que fichier image
Comment est-ce que je ferais ceci? J'ai essayé d'utiliser RenderTargetBitmap
pour charger le CanvasControl
(code ci-dessous), mais pour une raison quelconque, il clips l'image et seulement une petite image de la partie supérieure horizontale est faite.
async private void Button_Click(object sender, RoutedEventArgs e)
{
#region (c) rendering UIElement to bitmap code
var bitmap = new RenderTargetBitmap();
await bitmap.RenderAsync(ccDraw); // ccDraw is CanvasControl
// get the pixels
IBuffer pixelBuffer = await bitmap.GetPixelsAsync();
byte[] pixels = pixelBuffer.ToArray();
// write the pixels to a InMemoryRandomAccessStream
var stream = new InMemoryRandomAccessStream();
var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.BmpEncoderId, stream);
encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Straight, (uint)bitmap.PixelWidth, (uint)bitmap.PixelHeight, 96, 96, pixels);
await encoder.FlushAsync();
stream.Seek(0);
Image iNew = new Image();
iNew.Stretch = Stretch.None;
iNew.Source = bitmap;
gOuter.Children.Add(iNew);
ccDraw.Visibility = Visibility.Collapsed; // hide CanvasControl so we can see added image
#endregion
}
Pouvez-vous afficher du code, où vous avez essayé 'RenderTargetBitmap'? – RenDishen
@RenDishen J'ai ajouté le code que j'utilise –
Vérifiez ma réponse ci-dessous. Je pense que vous disiez essentiellement que vous voulez enregistrer la toile comme une image correcte? – thewisegod