//下面是截图函数
//重载一,全屏截图
private Image printScreen()
{
//获得当前屏幕的分辨率
Screen scr = Screen.PrimaryScreen; //using System.Windows.Forms; 要用这个命令空间
Rectangle rc = scr.Bounds;
int iWidth = rc.Width;
int iHeight = rc.Height;
//创建一个和屏幕一样大的Bitmap
Image myImage = new Bitmap(iWidth, iHeight);
//从一个继承自Image类的对象中创建Graphics对象
Graphics g = Graphics.FromImage(myImage);
//抓屏并拷贝到myimage里
g.CopyFromScreen(0, 0, 0, 0, new Size(iWidth, iHeight));
return myImage;
} //重载二,指定大小截图
private Image printScreen(int x,int y,int Width,int Height)
{
//创建一个和指定长宽一样大的Bitmap
Image myImage = new Bitmap(Width, Height);
//从一个继承自Image类的对象中创建Graphics对象
Graphics g = Graphics.FromImage(myImage);
//抓屏并拷贝到myimage里
g.CopyFromScreen(x, y, 0, 0, new Size(Width, Height));
return myImage;
}//timer1周期函数 path = lujingtextBox.Text + "\\" + DateTime.Now.ToString().Replace(":", "_") + " " + yiwanchengshuliang.ToString() + ".jpg";
if (yiwanchengshuliang <= shuliang)
{
if (quanpingjietu)
{
printScreen().Save(path);
}
else
{
printScreen(Convert.ToInt32(textBox1.Text), Convert.ToInt32(textBox2.Text), Convert.ToInt32(textBox3.Text) - Convert.ToInt32(textBox1.Text), Convert.ToInt32(textBox4.Text) - Convert.ToInt32(textBox2.Text)).Save(path);
}
yiwanchengshuliang++;
}
else
{
timer1.Stop();
}在FORM1里面添加开始按钮,添加一个timer1时钟,按开始以后 时钟周期为1000毫秒,截图数量是100张,截图范围是全屏,截图完毕自动保存 我编译运行以后 不截图的时候内存占用只有12M 但是我开始截图以后每截一张图,内存占用就增加很多,到100张图全部截完以后,这个程序的内存占用已经达到了800M 请问如何及时释放内存资源?
估计是Image myImage = new Bitmap(iWidth, iHeight); 这一句的原因,每过一秒就new一个估计来不及释放,我去改改语句
//重载一,全屏截图
private Image printScreen()
{
//获得当前屏幕的分辨率
Screen scr = Screen.PrimaryScreen; //using System.Windows.Forms; 要用这个命令空间
Rectangle rc = scr.Bounds;
int iWidth = rc.Width;
int iHeight = rc.Height;
//创建一个和屏幕一样大的Bitmap
Image myImage = new Bitmap(iWidth, iHeight);
//从一个继承自Image类的对象中创建Graphics对象
Graphics g = Graphics.FromImage(myImage);
//抓屏并拷贝到myimage里
g.CopyFromScreen(0, 0, 0, 0, new Size(iWidth, iHeight));
return myImage;
} //重载二,指定大小截图
private Image printScreen(int x,int y,int Width,int Height)
{
//创建一个和指定长宽一样大的Bitmap
Image myImage = new Bitmap(Width, Height);
//从一个继承自Image类的对象中创建Graphics对象
Graphics g = Graphics.FromImage(myImage);
//抓屏并拷贝到myimage里
g.CopyFromScreen(x, y, 0, 0, new Size(Width, Height));
return myImage;
}//timer1周期函数 path = lujingtextBox.Text + "\\" + DateTime.Now.ToString().Replace(":", "_") + " " + yiwanchengshuliang.ToString() + ".jpg";
if (yiwanchengshuliang <= shuliang)
{
if (quanpingjietu)
{
printScreen().Save(path);
}
else
{
printScreen(Convert.ToInt32(textBox1.Text), Convert.ToInt32(textBox2.Text), Convert.ToInt32(textBox3.Text) - Convert.ToInt32(textBox1.Text), Convert.ToInt32(textBox4.Text) - Convert.ToInt32(textBox2.Text)).Save(path);
}
yiwanchengshuliang++;
}
else
{
timer1.Stop();
}在FORM1里面添加开始按钮,添加一个timer1时钟,按开始以后 时钟周期为1000毫秒,截图数量是100张,截图范围是全屏,截图完毕自动保存 我编译运行以后 不截图的时候内存占用只有12M 但是我开始截图以后每截一张图,内存占用就增加很多,到100张图全部截完以后,这个程序的内存占用已经达到了800M 请问如何及时释放内存资源?
估计是Image myImage = new Bitmap(iWidth, iHeight); 这一句的原因,每过一秒就new一个估计来不及释放,我去改改语句
Bitmap保存后不使用了立即释放。
printScreen().Save(path);
image.dispose();
private void button1_Click(object sender, EventArgs e)
{ for (int i = 0; i <= 1000; i++)
{
string path = String.Format(@"D:\testpic\{0:N}.jpg", Guid.NewGuid());
printScreen().Save(path);
}
}
//下面是截图函数
//重载一,全屏截图
private static Image printScreen()
{
//获得当前屏幕的分辨率
Screen scr = Screen.PrimaryScreen; //using System.Windows.Forms; 要用这个命令空间
Rectangle rc = scr.Bounds;
int iWidth = rc.Width;
int iHeight = rc.Height;
//创建一个和屏幕一样大的Bitmap
Image myImage = new Bitmap(iWidth, iHeight);
//从一个继承自Image类的对象中创建Graphics对象
Graphics g = Graphics.FromImage(myImage);
//抓屏并拷贝到myimage里
g.CopyFromScreen(0, 0, 0, 0, new Size(iWidth, iHeight));
return myImage;
}改成静态,测试了一下 内存都有释放