MFC使摄像头录像在picture中显示时常出现崩溃问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 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)意思为获取显示控件的句柄(句柄就是指针),获取显示控件的DC  
GetDlgItem(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,问题解决。

猜你喜欢

转载自blog.csdn.net/u012839256/article/details/80404153