求高手看下如下代码为何运行时内存占用暴涨?
心云意水 2011-02-23 11:09:39 问题说明:
写了个钟表程序,表盘是一张图,因为指针作了一张大图,上边有0-359个度数分别的指向状态,利用程序,抓取每一度的指针状态,将背景去除后,贴到表盘上显示出来。
最早的时候,程序加载这张指针状态图,直接就报内存越界退出了,后来把指针状态图从中间分开,放入两个pictruebox中,运行没有问题了。但是现在出现了运行后内存暴涨,最终报错退出的问题。
个人分析应该是addImg这个函数导致的,但找不出问题所在,请高手不吝赐教!
程序用vs2005C#开发,运行环境wince,
ps:发现内存暴涨的问题,是我将程序在windowsxp系统下运行,看任务管理器看来的。
主函数如下:
private void addImg(Image source,Image bg,PictureBox watch,int i)//指针源图,目标背景图,显示的picturebox,指针索引(0-360)
{Bitmap bitmap=new Bitmap(bg);//目标背景
Bitmap bmp=new Bitmap(source);//要叠加上的图源
watch.Image=null;
int x=0,y=0;
//第180个指针位于新图的(0,0),因此重新计算
if(i>=180)
i-=180;
x=(i%10)*120;//x点为横向第i%10张图*单张宽度
y=((int)(i/10))*95;//(int)i/10所得数为第i张图前有多少行,*95图的宽度,则为目标行y坐标
Graphics g=Graphics.FromImage(bitmap);
ImageAttributes imageAttr=new ImageAttributes();
imageAttr.SetColorKey(Color.FromArgb(255,255,255),Color.FromArgb(255,255,255));//将白色剔出
g.DrawImage(bmp, //要叠加上去的图
new Rectangle(35,35,120,95), //要叠加到背景图的位置,尺寸
x,y,120,95, //要叠加源图的起始坐标、的尺寸
GraphicsUnit.Pixel,imageAttr); //透明阀值
watch.Image=(Bitmap)bitmap.Clone();
// Dispose
g.Dispose();
bitmap.Dispose();
bmp.Dispose();
++count;
}
//利用定时器不停的调用上边的函数
int count=0;
private void t1_Tick(object sender,EventArgs e)
{Image img;
if(count>360)
{t1.Enabled=false;
count=0;
return;
}
if(count<180)
img=pbz1.Image;
else
img=pbz2.Image;
addImg(img,ws.Images[0],pw1,count);
}
如若解决,100分感谢!