Instantané d'un WPF espace de la Toile à l'aide de RenderTargetBitmap
Je veux créer un Instantané de l'espace de la Toile dans mon Application. Je suis à l'aide de Visual pinceau pour obtenir l'Instantané et l'enregistrement de la même aide de la PngEncoder. Mais le PNG est juste un vide noir de l'image. Je ne suis pas sûr que le problème est avec le BitmapSource créé ou le PNGEncoder question. Voici le code que j'utilise pour obtenir le même.
public void ConvertToBitmapSource(UIElement element)
{
var target = new RenderTargetBitmap((int)(element.RenderSize.Width), (int)(element.RenderSize.Height), 96, 96, PixelFormats.Pbgra32);
var brush = new VisualBrush(element);
var visual = new DrawingVisual();
var drawingContext = visual.RenderOpen();
drawingContext.DrawRectangle(brush, null, new Rect(new Point(0, 0),
new Point(element.RenderSize.Width, element.RenderSize.Height)));
drawingContext.Close();
target.Render(visual);
PngBitmapEncoder encoder = new PngBitmapEncoder();
BitmapFrame outputFrame = BitmapFrame.Create(target);
encoder.Frames.Add(outputFrame);
using (FileStream file = File.OpenWrite("TestImage.png"))
{
encoder.Save(file);
}
}
OriginalL'auteur Amar | 2013-01-02
Vous devez vous connecter pour publier un commentaire.
Ne sais pas pourquoi exactement votre code ne fonctionne pas. Cela fonctionne:
Vous pourriez appeler InvalidateVisual sur l'élément avant d'appeler le Rendu.
ne fonctionne pas..
Ou UpdateLayout.
Désolé Clemens. Votre réponse était la bonne. Mais j'ai été chargement de la UIElement, à tort, qui a été l'erreur.
OriginalL'auteur Clemens
Merci à vous deux pour la question et la réponse.
Pour le bénéfice des autres qui recherchent la même réponse
J'ai trouvé que Clemens façon laisse une bande noire dans l'image avec l'image décalée, soit vers le bas ou la droite. Comme si ce n'était pas le rendu de l'élément à la position correcte dans le bitmap.
J'ai donc dû utiliser le VisualBrush comme Amar suggéré.
Voici le code qui a fonctionné pour moi:
OriginalL'auteur ILIA BROUDNO