Как сохранить чертеж (содержимое) с панели в любом формате на физическом носителе с C #?(WinForms) - PullRequest
1 голос
/ 09 января 2012

Может кто-нибудь сказать мне, что я не делаю, как следует, почему я не могу сохранить рисунок на физическое хранилище?

    private void panel1_Paint(object sender, PaintEventArgs e)
    {
        Pen p = new Pen(Color.Red, 3);
        Bitmap bmp = new Bitmap(700, 900);
        Graphics gr = this.CreateGraphics();

        gr.DrawLine(p, new Point(30, 30), new Point(80, 120));
        gr.DrawEllipse(p, 30, 30, 80, 120);

       //when i do this way it saves only a black rectangle, without other drawn content
       bmp.Save(@"C:\testBMP.jpeg", ImageFormat.Jpeg);


       // If i use the following 2 commented lines it saves only a empty rectangle.

       //Rectangle rec = new Rectangle(0, 0, 700, 900);
       // panel1.DrawToBitmap(bmp, rec);


    }

Спасибо за совет!

Ответы [ 3 ]

3 голосов
/ 09 января 2012

У вас есть две проблемы здесь.

  1. Рисование содержимого вашей панели. Это должно быть сделано внутри обработчика событий Paint, например:

    private void panel1_Paint(object sender, PaintEventArgs e)
    {
        using (Pen p = new Pen(Color.Red, 3))
        {
            // get the panel's Graphics instance
            Graphics gr = e.Graphics;
    
            // draw to panel
            gr.DrawLine(p, new Point(30, 30), new Point(80, 120));
            gr.DrawEllipse(p, 30, 30, 80, 120);
        }
    }
    
  2. Сохранение содержимого панели в виде изображения. Эта часть должна быть выполнена в другом месте (например, при нажатии кнопки «Сохранить»):

    private void saveButton_Click(object sender, EventArgs e)
    {
         int width = panel1.Size.Width;
         int height = panel1.Size.Height;
    
         using (Bitmap bmp = new Bitmap(width, height))
         {
             panel1.DrawToBitmap(bmp, new Rectangle(0, 0, width, height));
             bmp.Save(@"C:\testBMP.jpeg", ImageFormat.Jpeg);
         }
    }
    
3 голосов
/ 09 января 2012

Экземпляр gr не имеет ничего общего с вашим растровым изображением (bmp). Таким образом, вы создаете графику, которая связана с формой или элементом управления и имеет отдельное растровое изображение. Когда вы сохраняете растровое изображение, вы ничего не рисуете в нем.

1 голос
/ 09 января 2012

Вам нужно получить графический объект из изображения, а не из вашей формы.Я не проверял это, но оно должно работать.

private void panel1_Paint(object sender, PaintEventArgs e)
{
    using (Pen p = new Pen(Color.Red, 3))
    using (Bitmap bmp = new Bitmap(700, 900))
    using (Graphics gr = Graphics.FromImage(bmp))
    {
       gr.DrawLine(p, new Point(30, 30), new Point(80, 120));
       gr.DrawEllipse(p, 30, 30, 80, 120);

       bmp.Save(@"C:\testBMP.jpeg", ImageFormat.Jpeg);
    }
}
...