2012-10-16 19 views
15

Pracuję nad podstawową aplikacją do rysowania. Chcę, aby użytkownik mógł zapisać zawartość obrazu.Zapisywanie obrazu do pliku

enter image description here

pomyślałem, że powinienem użyć

System.Drawing.Drawing2D.GraphicsState img = drawRegion.CreateGraphics().Save(); 

ale to mi nie pomaga przy zapisywaniu pliku.

+1

Jakiego rodzaju kontrolą jest "drawRegion"? – Steve

+1

'drawRegion' jest panelem – Victor

Odpowiedz

26

Można spróbować zapisać zdjęcie za pomocą tego podejścia

SaveFileDialog dialog = new SaveFileDialog(); 
if (dialog.ShowDialog() == DialogResult.OK) 
{ 
    int width = Convert.ToInt32(drawImage.Width); 
    int height = Convert.ToInt32(drawImage.Height); 
    Bitmap bmp = new Bitmap(width,height);   
    drawImage.DrawToBitmap(bmp, new Rectangle(0, 0, width, height); 
    bmp.Save(dialog.FileName, ImageFormat.Jpeg); 
} 
+7

@Joel Dobrze, nie doceniasz IntelliSense wystarczająco, dopóki nie napiszesz tego kodu ręcznie – Steve

+1

Dlaczego nie usunąłeś obiektu bmp? Czy nie może to pozostawić pliku w stanie "otwartym"? –

+0

gdzie można by zapisać ten obraz? –

3

Jeśli rysunek na Grafiki Steruj, niż powinieneś zrobić, aby coś narysować na Bitmapie wszystko, co rysujesz na płótnie, ale pamiętaj, że Bitmapa musi być dokładnym rozmiarem kontrolki, którą jesteś awing na:

Bitmap bmp = new Bitmap(myControl.ClientRectangle.Width,myControl.ClientRectangle.Height); 
    Graphics gBmp = Graphics.FromImage(bmp); 
    gBmp.DrawEverything(); //this is your code for drawing 
    gBmp.Dispose(); 
    bmp.Save("image.png", ImageFormat.Png); 

Lub możesz użyć metody kontroli z DrawToBitmap. Coś takiego:

Bitmap bmp = new Bitmap(myControl.ClientRectangle.Width, myControl.ClientRectangle.Height); 
myControl.DrawToBitmap(bmp,new Rectangle(0,0,bmp.Width,bmp.Height)); 
bmp.Save("image.png", ImageFormat.Png); 
Powiązane problemy