如何使用当前图纸保存pictureBox1.Image?

时间:2014-09-15 15:35:57

标签: c# .net winforms picturebox

在form1中我有pictureBox1 Paint事件:

private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
  CloudEnteringAlert.Paint(e.Graphics, factor, distance);
  pictureboximagestosavecount++;
  pictureBox1.Image.Save(@"c:\temp\pboximages\" + 
      pictureboximagestosavecount.ToString("D6") + 
      "pbimg.gif", System.Drawing.Imaging.ImageFormat.Gif);
  anglecounter += 1;
  DrawLine(e.Graphics, anglecounter);
  if (null != mImage)
  {
     e.Graphics.DrawImage(mImage, mRect);
  }
  DrawRectangle(e.Graphics);
}

当我运行程序时,我看到了DrawLine,我看到了cloudEnteringAlert和图像,我看到了pictureBox1上的所有内容。

我现在添加了保存行:

pictureBox1.Image.Save(@"c:\temp\pboximages\" + 
                         pictureboximagestosavecount.ToString("D6") + "pbimg.gif", 
                         System.Drawing.Imaging.ImageFormat.Gif);

我的驱动器上有很多图像gif,但它们是相同的我没有看到CloudEnteringAlert而不是DrawLine只有图像本身。我想我不是只保存图像的变化。那我怎么能一直保存它,包括CloudEnteringAlert和DrawLine的图纸?

编辑:

这就是我现在所做的:

private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {
            anglecounter += 1;
            DrawLine(e.Graphics, anglecounter);
            if (null != mImage)
            {
                e.Graphics.DrawImage(mImage, mRect);
            }
            DrawRectangle(e.Graphics);

            pictureboximagestosavecount++;
            savePictureBox(pictureBox1, @"c:\temp\pboximages\" + pictureboximagestosavecount.ToString("D6") + "pbimg.gif");
        }

        void savePictureBox(PictureBox PB, string fileName)
        {
            using (Bitmap bmp = new Bitmap(PB.ClientSize.Width, PB.ClientSize.Height))
            {
                PB.DrawToBitmap(bmp, PB.ClientRectangle);
                bmp.Save(fileName, System.Drawing.Imaging.ImageFormat.Gif);
            }
        }

我有timer3 tick事件,使pictureBox1.Invalidate();每10ms 我需要10ms的间隔时间,因为我希望绘画事件中的绘图尽可能平滑且快速。

因为我每隔10毫秒就在paint事件中调用savePictureBox,所以一切都很慢。

这是timer3 tick事件。 Timer3间隔设置为10ms,因为我希望DrawLine方法中的绘图很快。

private void timer3_Tick(object sender, EventArgs e)
        {
            pictureBox1.Invalidate();
        }

1 个答案:

答案 0 :(得分:2)

以下是您可能正在寻找的代码:

void savePictureBox(PictureBox PB, string fileName)
{
    using (Bitmap bmp = new Bitmap(PB.ClientSize.Width, PB.ClientSize.Height))
    {
        PB.DrawToBitmap(bmp, PB.ClientRectangle);
        bmp.Save(fileName, System.Drawing.Imaging.ImageFormat.Gif);
    }
}

它会PictureBox完整保存ImageBackgroundImage(如果有的话)以及Paint事件中的所有内容。

如果您真的想要修改图片,那就说..