Search code examples
c#visual-studiojpegsystem.drawingdrawtobitmap

panel1.DrawToBitmap doesn't draw lines from DrawLine


I have a panel on which I'm drawing lines using:

Point PreviousPoint = new Point (0,0);
Point NewPoint = new Point (10,10);
Pen MyPen = new Pen(Color.Black, 2);
Graphics MyGraphics = panel1.CreateGraphics();
MyGraphics.DrawLine(MyPen, PreviousPoint, NewPoint);

This all works fine. I obviously change the points to draw more lines, but that doesn't matter for this question. I want to export that panel as a jpg file. I'm using this code:

Bitmap bmp = new Bitmap(panel1.Width, panel1.Height);
panel1.DrawToBitmap(bmp, new Rectangle(0, 0, panel1.Width, panel1.Height));
bmp.Save("C:\\panel.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);

This outputs a blank jpg. The background of my panel is gray, and the background of the jpg is the same gray, so I know it's actually exporting the panel. Also, I added a button into the panel just to see if it would get saved, and it did. So for some reason the jpg isn't saving the lines being drawn.


Solution

  • So I made a workaround that solves the core problem. I made an array of the points I plotted to draw the lines, then I did this:

            // make sure you actually drew something
            if (MyLines.Length > 0)
            {
                // instantiate the stuff you need
                Image img = new Bitmap(panel1.Width, panel1.Height);
                Graphics g = Graphics.FromImage(img);
                Pen pen = new Pen(Color.Black, 2);
    
                // draw every line (from every even index to the one after it)
                for (int i = 0; i < MyLines.Length; i++)
                {
                    if (i % 2 == 0)
                    {
                        g.DrawLine(pen, MyLines[i], MyLines[i + 1]);
                    }
                }
                img.Save("C:\\panel.png", System.Drawing.Imaging.ImageFormat.Png);
            }
        }