2009-10-08 11 views
1

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?

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