2009-12-02 2 views
5

Je réalise cette application de peinture. C'est plutôt simple. Il se compose d'un panneau sur lequel je vais dessiner et enfin je vais enregistrer en tant que fichier JPG ou BMP ou PNG.Enregistrement du panneau en tant qu'image

Mon application fonctionne parfaitement mais le problème auquel je suis confronté est que lorsque je sauvegarde la sortie n'est pas ce que dessiné sur le panneau de son image noire rien que du noir.

tout mon travail est sauvegardé comme

Thepic = new Bitmap(panel1.ClientRectangle.Width, this.ClientRectangle.Height); 

et la souris (bas, haut chose) je

snapshot = (Bitmap)tempDraw.Clone(); 

et sauvé le travail normalement mais encore une fois le rsult est noir image pas ce que le panneau contient.

+0

Vous avez "pgn" au lieu de "png" dans votre filtre. –

+0

... Je corrigerais le message moi-même, mais si c'est collé à partir de votre source réelle, vous voudrez peut-être savoir à ce sujet ... –

+0

Son ok mais encore Je suis tellement confus pourquoi La sortie est stil noir Image – Tony

Répondre

9

Je pense que le problème peut être que vous utilisez la méthode "Cloner".

Essayez "DrawToBitmap" - cela a fonctionné pour moi dans le passé.

Voici un exemple qui enregistre une image bitmap à partir d'un contrôle appelé "plotPrinter":

 int width = plotPrinter.Size.Width; 
     int height = plotPrinter.Size.Height; 

     Bitmap bm = new Bitmap(width, height); 
     plotPrinter.DrawToBitmap(bm, new Rectangle(0, 0, width, height)); 

     bm.Save(@"D:\TestDrawToBitmap.bmp", ImageFormat.Bmp); 
 Be aware of saving directly to the C directly as this is not 
     permitted with newer versions of window, try using SaveFileDialog. 
SaveFileDialog sf = new SaveFileDialog(); 
    sf.Filter = "Bitmap Image (.bmp)|*.bmp|Gif Image (.gif)|*.gif|JPEG Image (.jpeg)|*.jpeg|Png Image (.png)|*.png|Tiff Image (.tiff)|*.tiff|Wmf Image (.wmf)|*.wmf"; 
    sf.ShowDialog(); 
    var path = sf.FileName; 
+4

Cela fonctionne très bien Pour les contrôles sans contrôles enfants, mais lorsque le contrôle a des contrôles enfants, DrawToBitmap attire les enfants dans l'ordre inverse de z (ce qui signifie que les contrôles sont dessinés devant les contrôles frontaux réels). –

+0

Merci beaucoup votre solution fonctionne .... – Tony

+0

ne trouve pas drawtobitmap méthode –

0

Vous pouvez essayer, ça marche pour moi, au lieu que je sed MemoryStream .

MemoryStream ms = new MemoryStream(); 
Bitmap bmp = new Bitmap(panel1.Width, panel1.Height); 
panel1.DrawToBitmap(bmp, new System.Drawing.Rectangle(0, 0, panel1.Width, panel1.Height)); 
bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); //you could ave in BPM, PNG etc format. 
byte[] Pic_arr = new byte[ms.Length]; 
ms.Position = 0; 
ms.Read(Pic_arr, 0, Pic_arr.Length); 
ms.Close(); 
Questions connexes