如何在一个面板中保存多个图片框?

How do I save several pictureboxes inside a panel?

我有一个包含多个控件和 4 个图像的面板。 4张图片在一个框架内。现在我只想将 4 个图片框(在框架中)保存到 jpg 文件中,但是图片框都是白色的,我只能在保存的图像中看到面板。

                Bitmap bmp = new Bitmap(frame.Width, frame.Height);                   
                Rectangle rect = new Rectangle(0, 0, frame.Width, frame.Height);                    

                this.panel1.DrawToBitmap(bmp, rect);                                                            
                bmp.Save("C:\Temp\zo.jpg", ImageFormat.Jpeg);                                                  

我该怎么做?

有(至少)两种方法:

  • 如果 PictureBoxes 可以在不切断图像的情况下实际显示图像,那么您的代码中的那个就可以正常工作。注意:PictureBoxes 必须真正位于 里面 Panel(即必须是他们的 Parent),否则不会绘制他们!

这是一个工作示例:

private void button1_Click(object sender, EventArgs e)
{
   Bitmap bmp = new Bitmap(panel1.ClientSize.Width, panel1.ClientSize.Height);
   using (Graphics G = Graphics.FromImage(bmp))
       panel1.DrawToBitmap(bmp, panel1.ClientRectangle);

   // now we can save it..
   bmp.Save("d:\foursome.jpg", ImageFormat.Jpeg);
   // and let it go:
   bmp.Dispose();
}
  • 另一种方式使用DrawImage在代码中绘制Images

它更复杂,但给了你更多的控制权:

private void button2_Click(object sender, EventArgs e)
{
        Bitmap bmp = new Bitmap(panel1.ClientSize.Width, panel1.ClientSize.Height);

        int x1 = 0;
        int x2 = Math.Max(pictureBox1.Image.Width, pictureBox3.Image.Width);

        int y1 = 0;
        int y2 = Math.Max(pictureBox1.Image.Height, pictureBox2.Image.Height);

        Rectangle rect1 = new Rectangle(new Point(x1, y1), pictureBox1.Image.Size);
        Rectangle rect2 = new Rectangle(new Point(x2, y1), pictureBox2.Image.Size);
        Rectangle rect3 = new Rectangle(new Point(x1, y2), pictureBox3.Image.Size);
        Rectangle rect4 = new Rectangle(new Point(x2, y2), pictureBox4.Image.Size);

        using (Graphics G = Graphics.FromImage(bmp))
        {
            G.DrawImage(pictureBox1.Image, rect1);
            G.DrawImage(pictureBox2.Image, rect2);
            G.DrawImage(pictureBox3.Image, rect3);
            G.DrawImage(pictureBox4.Image, rect4);
        }
        bmp.Save("d:\foursome2jpg", ImageFormat.Jpeg);
       // and clean up:
       bmp.Dispose();
}

这不仅可以让您添加或删除图像之间的间距,还可以让您使用 this DrawImage format 调整它们的大小。当然,您可以添加任何您想要的内容,eg.g 精美的框架或文本..