解决方案 »

  1.   


    什么叫逐渐减小?你的程序是否不断调用此方法截图。这样的话有两个地方要考虑,一个是楼上说的gp.Dispose,另一个是对于返回的Bitmap在你自己的程序里,用完了以后也要Dispose。
      

  2.   


    什么叫逐渐减小?你的程序是否不断调用此方法截图。这样的话有两个地方要考虑,一个是楼上说的gp.Dispose内存空间逐渐减小就是说 我电脑的内存空间消耗越来越大。我是在循环调用此方法截图。gp.Dispose应该加在哪个地方你能告诉我一下吗?我之前加过,但好像没啥用,我打开任务管理器,发现内存消耗一直在上升。
      

  3.   


    请问加在哪个地方?  GetFullScreen()这个函数之外吗?
      

  4.   


    什么叫逐渐减小?你的程序是否不断调用此方法截图。这样的话有两个地方要考虑,一个是楼上说的gp.Dispose,另一个是对于返回的Bitmap在你自己的程序里,用完了以后也要Dispose。内存空间逐渐减小就是说 我电脑的内存空间消耗越来越大。我是在循环调用此方法截图。gp.Dispose应该加在哪个地方你能告诉我一下吗?我之前加过,但好像没啥用,我打开任务管理器,发现内存消耗一直在上升。
      

  5.   

    Graphics gp这个对象需要释放,在return之前释放即可
    此外,返回的image对象,你后来应该是做了保存文件的操作了吧?保存为文件后,也要释放.
      

  6.   


    不好意思看错了,gp.Dispose()我是加了的,就在return之前,因为改来改去,改掉了。但加上后感觉没啥用的。
      

  7.   


    gp.Dispose()我之前加过,没啥用的。
    image对象我用完了释放,如下代码:
     private void timer1_Tick(object sender, EventArgs e)
            {            image1 = GetFullScreen();
                if (flag == 1)
                {
             if (ImageEquals() == true)////////////////////////////////////////////////////////////////////////////下面image1.Dispose()后,调用这个函数会报错
                    {
                        CommonCount = CommonCount + 1;
                        if (CommonCount == 1)
                        {
                            AutoClick(clickx, clicky);
                        }
                        else if (CommonCount >= 2)
                        {
                            MY_DLL.Beep(Fre, SongT);
                            CommonCount = 0;
                        }
                    }
                    else
                        CommonCount = 0;
                }
                image2 = image1;
                image1.Dispose();/////////////////////////////////////////////////////////////////////////
                flag = 1;        }public bool ImageEquals( ) //粗略判断两幅图是否一样
            {
     
                int countflag = 0;
                for (int i = 0; i < image1.Width; i = i + 2)
                {
                    for (int j = 0; j < image1.Height; j = j + 2)
                    {
                        if (image1.GetPixel(i, j) != image2.GetPixel(i, j))//////////////////////////////////////////////////////////报错提示参数无效
                            countflag = countflag + 1;
                    }
                }
                if (countflag > 10)
                    return false;
                else
                    return true;
            }如果加上image1.Dispose()的话,调用 ImageEquals( )函数时, ImageEquals( )函数内的 if (image1.GetPixel(i, j) != image2.GetPixel(i, j)) 处会报错,提示 参数无效