Как сохранить графический объект как изображение в C #? - PullRequest
8 голосов
/ 12 ноября 2010

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

Необходимо сделать что-то вроде скриншота, но мне нужно просто изображение определенной панели в моем приложении, и я хочу сделать это нажатием кнопки в моем приложении.

С уважением, Примоз


EDIT: Я также рисую на этой панели, используя этот код

            Graphics g = chartTemperature.CreateGraphics();    
            g.DrawLine(p, prevPoint, e.Location);
            prevPoint = e.Location;

Но тогда я не получу это в образ. Почему и как это исправить?


РЕДАКТИРОВАТЬ 2:

namespace Grafi
{
    public partial class Form1 : Form
    {

        bool isDrawing = false;
        Point prevPoint;

        public Form1()
        {
            InitializeComponent();
        }

        private void chartTemperature_MouseDown(object sender, MouseEventArgs e)
        {
            isDrawing = true;
            prevPoint = e.Location;
        }

        private void chartTemperature_MouseMove(object sender, MouseEventArgs e)
        {
            Pen p = new Pen(Color.Red, 2); 
            if (isDrawing)
            {
                Graphics g = chartTemperature.CreateGraphics();    
                g.DrawLine(p, prevPoint, e.Location);
                prevPoint = e.Location;

                numOfMouseEvents = 0;              
            }
            p.Dispose();
        }

        private void chartTemperature_MouseUp(object sender, MouseEventArgs e)
        {
            isDrawing = false;
        }
    }
} 

Это мой код для рисования произвольной линии на графике. Не могли бы вы помочь мне сделать это правильно?

Ответы [ 2 ]

14 голосов
/ 12 ноября 2010

Используйте метод Control.DrawToBitmap (). Например:

    private void button1_Click(object sender, EventArgs e) {
        using (var bmp = new Bitmap(panel1.Width, panel1.Height)) {
            panel1.DrawToBitmap(bmp, new Rectangle(0, 0, bmp.Width, bmp.Height));
            bmp.Save(@"c:\temp\test.png");
        }
    }
3 голосов
/ 12 ноября 2010

В ответ на ваши изменения:

Если вы рисуете на панели, используя объект Graphics, возвращенный методом CreateGraphics, ваша графика не является постоянной.Все, что вы рисуете на объекте, будет удалено при следующем перерисовке элемента управления.(Для получения более подробной информации по этому вопросу см .: http://www.bobpowell.net/picturebox.htm и http://www.bobpowell.net/creategraphics.htm)

Когда вы используете метод DrawToBitmap, как предложено в ответе Ханса Пассанта, панель управления перерисовывается, чтовызывает потерю ваших рисунков.

Вместо этого, если вы хотите, чтобы ваши рисунки были постоянными, вам нужно обработать событие Paint элемента управления панели. Это событие вызывается каждый раз.время, когда элемент управления должен быть перерисован, и предоставляет экземпляр PaintEventArgs, который содержит объект Graphics, который можно использовать для постоянного рисования на поверхности элемента управления так же, как вы использовали объект Graphics, возвращаемый объектомCreateGraphics метод.

После того, как вы исправили свой чертежный код, вы можете использовать решение Ганса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...