在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();
}
答案 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
完整保存Image
,BackgroundImage
(如果有的话)以及Paint
事件中的所有内容。
如果您真的想要修改图片,那就说..