版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012839256/article/details/80404153
在创建MFC,获取摄像头数据在picture控件中显示,虽能正常显示,但在运行3~5分钟或者更短的时间,会使MFC卡住,或者软件当机。
经测试和查询,主要产生卡死的原因是
CRect myrect;
被定义成全局变量,可能是由于多次复制帧导致内存占满,从而导致MFC卡死。
解决方案:
将CRect myrect;定义成私有变量,将picture控件的显示放在一个单独的函数里执行,不占用整个MFC的内存。因此作者在这里将定时器函数作为修改如下:
CRect myrect;
CvvImage myCvvImage;
switch(nIDEvent)
{
case 1://定时器1执行流程
pDC = GetDlgItem(picture concrol)->GetDC();//GetDlgItem(IDC_PIC_STATIC)意思为获取显示控件的句柄(句柄就是指针),获取显示控件的DCGetDlgItem(picture concrol)->GetClientRect(myrect);
hDC = pDC->GetSafeHdc();//获取显示控件的句柄
frame = cvQueryFrame(Capture); //图片读取路径可以自己设定
myCvvImage.CopyOf(frame, 1); //复制该帧图像
myCvvImage.DrawToHDC(hDC, &rect); //显示到设备的矩形框内
ReleaseDC(pDC);
CDialogEx::OnTimer(nIDEvent);
break;
default:
break;
}
执行之后,经过10分钟以上的测试,无卡死现象,OK,问题解决。