CopyFromScreen的参数无效,请问高手们这是怎么回事儿??

wdw1985 2011-04-27 06:40:44


public bool isImageChange(Rectangle pre, Rectangle current)
{
//定义两个Bitmap图像
Bitmap preImage = new Bitmap(240, 320);
Bitmap currentImage = new Bitmap(240, 320);

//System.Drawing.Imaging.BitmapData preImageData = preImage.LockBits(pre, System.Drawing.Imaging.ImageLockMode.ReadWrite, System.Drawing.Imaging.PixelFormat.Format32bppRgb);
//System.Drawing.Imaging.BitmapData currentImageData = currentImage.LockBits(current, System.Drawing.Imaging.ImageLockMode.ReadWrite, System.Drawing.Imaging.PixelFormat.Format32bppRgb);

Graphics preGraph = Graphics.FromImage(preImage);
Graphics currentGraph = Graphics.FromImage(currentImage);

preGraph.CopyFromScreen(pre.X, pre.Y, 0, 0, new Size(240, 320));
****** currentGraph.CopyFromScreen(current.X, current.Y, 0, 0, new Size(240, 320));

preGraph.Dispose();
currentGraph.Dispose();

//对两个bitmap进行比较
if (BitmapCompare2(preImage, currentImage) == 0)
{
//如果等于0,说明图像一致,返回true
return true;
}
else
{
//如果不等于0,说明图像不一致,返回false
return false;
}
}




我有一个timer,20毫秒执行一次,调用上面这个方法进行图片的对比

刚开始的时候不会出错,时间长了就会在第二个CopyFromScreen出现“参数无效”的报错,不知道怎么回事儿。。。
...全文
369 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
caterpillar12345 2011-05-04
  • 打赏
  • 举报
回复
顶,遇到同样问题了
wdw1985 2011-04-29
  • 打赏
  • 举报
回复
自己再顶一下。。。
wdw1985 2011-04-29
  • 打赏
  • 举报
回复
时间长了还会出现“内存不足”的错误。。。。
wdw1985 2011-04-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xiaoyuzi 的回复:]
在dispose之后,添加GC.Collect();
[/Quote]

加上这个还是会出问题,就是上面说的“缓冲操作当前正在进行中,无法释放 BufferedGraphicsContext。”

会不会是我这个timer执行的太快了,导致释放的速度比创建的速度慢呢???
wdw1985 2011-04-28
  • 打赏
  • 举报
回复
没人遇到过这个问题么。。。。
wdw1985 2011-04-28
  • 打赏
  • 举报
回复
有的时候还会出现这个错误“缓冲操作当前正在进行中,无法释放 BufferedGraphicsContext”
今天把里面的有关graph的内容都注释了,就不出错了。。。
wdw1985 2011-04-28
  • 打赏
  • 举报
回复
自己顶。。。。。。。。。。。。。。。。。。。。。。
xiaoyuzi 2011-04-28
  • 打赏
  • 举报
回复
在dispose之后,添加GC.Collect();

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧