2009-12-02 19 views
5

Sto facendo questa applicazione di pittura. È un po 'semplice. Consiste in un pannello in cui disegnerò e infine salverò come file JPG o BMP o PNG.Salvataggio del pannello come immagine

La mia applicazione funziona perfettamente ma il problema che sto affrontando è che quando sto salvando l'output non è quello che ha disegnato sul pannello la sua immagine nera nulla di nero.

tutto il mio lavoro è stato salvato come

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

e del mouse (giù, su cosa) ho

snapshot = (Bitmap)tempDraw.Clone(); 

e salvato il lavoro normalmente, ma ancora una volta la rsult è un'immagine in bianco non ciò che il pannello contiene.

+0

Hai "pgn" invece di "png" nel tuo filtro. –

+0

... Correggerei il post personalmente, ma se questo è incollato dalla tua vera fonte potresti volerne sapere ... –

+0

Va bene, ma sono così confuso, perché L'out put è stil black Image – Tony

risposta

9

Penso che il problema potrebbe essere che stai usando il metodo "Clone".

Prova "DrawToBitmap" - ha funzionato per me in passato.

Ecco un esempio che salva una bitmap da un controllo denominato "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

Questo funziona benissimo per i controlli senza controlli figli, ma quando il controllo ha controlli figli, 'DrawToBitmap' disegna i bambini al contrario l'ordine 'z' (cioè dietro i controlli vengono disegnati davanti ai controlli frontali reali). –

+0

Grazie mille la tua soluzione di lavoro .... – Tony

+0

non riesci a trovare il metodo drawtomap –

0

si potrebbe provare questo, lavorare per me, invece mi 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(); 
Problemi correlati