J'ai deux couches. La première couche est le contrôle Image. La source est Bitmap Image. Et ceci est la couche de fond. Le second, qui est la couche avant est une toile sur laquelle je peux dessiner des objets géométriques (telles que la ligne, polyligne, rectangle, etc.) et l'arrière-plan de la toile est transparente. Comment puis-je fusionner ces deux couches et l'enregistrer en tant qu'image à l'aide de WPF.Comment fusionner des calques et enregistrer en tant qu'image dans WPF?
1
A
Répondre
0
Que voulez-vous dire par « couches »? Juste deux contrôles assis dans la même cellule d'une grille? Si vous avez les deux « couches » assis dans un autre récipient (comme une grille, ou même la fenêtre), vous pouvez utiliser RenderTargetBitmap avec ce conteneur pour obtenir votre image. J'ai quelques détails, une méthode d'extension pour taking WPF "Screenshots" on my blog.
0
Vous pouvez obtenir bitmap de votre panneau parent sur lequel vous avez placé votre contrôle d'image et toile.
Comment est le code pour obtenir le bitmap de UIElement dans WPF.
RenderTargetBitmap bmp = new RenderTargetBitmap(Width, Height, 96, 96, PixelFormats.Pbgra32);
bmp.Render(parentPanel);
0
Utilisez quelque chose comme, appeler cette méthode à partir de votre toile (ce qui est la toile) -
private Bitmap ImageGenerator()
{
var transform = this.LayoutTransform;
// Call UpdateLayout to make sure changes all changes
// while drawing objects on canvas are reflected
var layer = AdornerLayer.GetAdornerLayer(this);
layer?.UpdateLayout();
// Get the size of canvas
var size = new System.Windows.Size(this.ActualWidth, this.ActualHeight);
// Measure and arrange the surface
// VERY IMPORTANT
this.Measure(size);
this.Arrange(new Rect(RenderSize));
RenderTargetBitmap renderBitmap =
new RenderTargetBitmap(
(int)this.ActualWidth,
(int)this.ActualHeight,
96d,
96d,
PixelFormats.Pbgra32);
renderBitmap.Render(this);
JpegBitmapEncoder encoder = new JpegBitmapEncoder();
// push the rendered bitmap to it
encoder.Frames.Add(BitmapFrame.Create(renderBitmap));
var stream = new MemoryStream();
encoder.Save(stream);
this.LayoutTransform = transform;
return new Bitmap(stream);
}
Questions connexes
- 1. Dans WPF Comment capturer une partie d'un canevas à enregistrer en tant que BMP ou GIF?
- 2. Problèmes d'organisation des calques CSS avec en-tête et tableau
- 3. Enregistrer le dessin en tant qu'image
- 4. iPhone - enregistrer l'affichage actuel en tant qu'image
- 5. enregistrer en tant que boîte de dialogue dans asp.net
- 6. Comment faire glisser les calques en synchronisation
- 7. Comment fusionner un menu avec WPF MVVM?
- 8. Insérer des calques dans Visual Studio 2008
- 9. Comment enregistrer une vue rendue en tant que fichier statique?
- 10. Comment enregistrer toute la toile défilable en tant que Png
- 11. Comment enregistrer une UIImage en tant que BMP?
- 12. Enregistrer Acrobat PDF avec des tampons et du texte ajouté en tant que document de base
- 13. Comment contrôler l'ordre des calques dans Virtual Earth
- 14. Comment animer les calques dans l'iPhone?
- 15. Fusionner des fichiers et publier des données en PHP
- 16. Comment obtenir et enregistrer des constantes?
- 17. Enregistrer au format PDF dans WPF
- 18. Comment lire et écrire des fichiers CSV en utilisant WPF?
- 19. Transitions et configuration de calques/scènes dans cocos2d iPhone
- 20. manipuler des calques CSS avec javascript
- 21. script pour enregistrer le fichier en tant qu'unicode
- 22. widget tableau flash qui peut enregistrer en tant que PDF
- 23. Comment diviser et fusionner des fichiers vidéo MPEG
- 24. Enregistrer des paramètres dans une classe et comment y accéder
- 25. Rendu d'objets WPF en tant qu'image dans ASP.NET
- 26. Comment extraire des images à partir d'une CImageList et les enregistrer en tant que fichiers GIF transparents
- 27. ListBox en tant que contrôle numérique UpDown dans WPF
- 28. Fusionner des fichiers Excel en un
- 29. Comment enregistrer un e-mail en tant que brouillon dans Outlook 2003 par programmation?
- 30. Comment empêcher la boîte de dialogue 'Enregistrer (image) en tant que' sur Ctrl + clic dans Opera