做了个视频读取,闪屏的问题解决_每天进步一点点_百度空间

最近写的标定程序,想功能强大些,可以直接拍摄图像的那种,所以就索性把视频读取给加进去了。公司做的视频都是利用视频采集卡-ok卡读取数据了,所以也就跟同组人要了个封装好的okcamera类做视频采集了。


开始视频卡读出的只是图像像素区的数据,当然在显示的时候需要加上文件信息头信息,这个经过了大师兄的指点,就很容易搞定了。而且保存的时候也是需要加上文件头,这两个都涉及到申请内存和初始化一些数据的,该赋的值赋上了就ok了。

下面比较麻烦的是在实时显示的时候,我是用setTimer函数,一段时间刷新界面的,在onpain里重绘图像,这样做,出现了两个问题,使用Invalidate(false)后,视频上会有一道白杠在闪,第二个问题时旁边操作区的按钮也跟着闪。

{dy}个问题,查了下,闪屏实质是背景与前景不断更换的频率造成的,索性我就把brush背景那段代码归到了读图像里面,视频时不使用brush刷新背景,这样就解决了。

第二个问题,使用CWND里的InvalidateRect()只刷新我们需要的Rect里就行,这里只刷新picture控件里。

void CliyyCalibrateDlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
//liyy
//读出ok卡中图像数据
m_pOkCamra->SingleLive(m_imgByte,0);
// m_pOkCamra->
//    m_pOkCamra->GrabSingleImage(0,8,5);
//    m_pOkCamra->GetImgFromBuffer(m_imgByte,0,2);
   //初始化图像DIB对象------另一部分在INitialDialog里初始化
m_imgDib.SetPtr(m_imgByte,m_width,m_height,8);

if (m_bCaptureFlag)
{  
   CWnd *pWnd;
   CRect pRc;
  
   pWnd = GetDlgItem(IDC_STATIC_PICTURE);
   pWnd->GetClientRect(&pRc);

InvalidateRect(&pRc,false);
}
//UpdateData(true);

CDialog::OnTimer(nIDEvent);
}



郑重声明:资讯 【做了个视频读取,闪屏的问题解决_每天进步一点点_百度空间】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——