2009-12-02 14 views
5

Estoy haciendo esta aplicación de pintura. Es algo simple. Consiste en un panel en el que dibujaré y finalmente lo guardaré como archivo JPG o BMP o PNG.Guardando el panel como una imagen

Mi aplicación funciona a la perfección, pero el problema al que me enfrento es que cuando estoy guardando la salida no es lo que dibuja en el panel su negro Imagen nada más que negro.

todo mi trabajo se ha guardado como

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

y en el ratón (abajo, arriba cosa) tengo

snapshot = (Bitmap)tempDraw.Clone(); 

y guardado el trabajo que normalmente pero de nuevo el rsult es una imagen negro no lo que contiene el panel.

+0

Usted tiene "pgn" en lugar de "png" en su filtro. –

+0

... Corregiría la publicación yo mismo, pero si eso está pegado de tu verdadera fuente es posible que quieras saber sobre ello ... –

+0

Está bien, pero todavía estoy tan confundido por qué The out put stil black Image – Tony

Respuesta

9

Creo que el problema puede ser que está utilizando el método "Clonar".

Probar "DrawToBitmap" - eso funcionó para mí en el pasado.

He aquí una muestra que guarda un mapa de bits de un control llamado "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

Esto funciona muy bien para controles sin controles secundarios, pero cuando el control tiene controles secundarios, 'DrawToBitmap' dibuja a los niños en orden inverso 'z' (significando que detrás de los controles se dibujan frente a los controles frontales reales). –

+0

Gracias mucho a su solución de trabajo .... – Tony

+0

no se puede encontrar el método drawtobitmap –

0

usted podría intentar esto, trabajar para mí, en lugar de eso 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(); 
Cuestiones relacionadas