19,468
社区成员
发帖
与我相关
我的任务
分享
CFileDialog dlg( true, NULL, NULL, NULL, _T("*.avi|*.avi||)"), NULL );
CString filePath;
if (dlg.DoModal() == IDOK)
{
filePath = dlg.GetPathName();
}
else
{
return;
}
m_pCapture = cvCreateFileCapture( (LPCTSTR)filePath );
iFps = cvGetCaptureProperty( m_pCapture, CV_CAP_PROP_FRAME_COUNT ); // 获取当前视频帧数
CString frameNum;
frameNum.Format( _T("%d"), iFps);
m_editStr1 = frameNum;
m_curFrame = "1";
UpdateData(FALSE);
m_pDC = GetDlgItem(IDC_PIC) ->GetDC(); // 获得显示控件的 DC
m_hDC = m_pDC ->GetSafeHdc(); // 获取 HDC(设备句柄) 来进行绘图操作
m_pCurFrame = cvQueryFrame( m_pCapture ); // 获取视频第一帧
m_unHeight = m_pCurFrame->height;
m_unWidth = m_pCurFrame->width;
GetDlgItem(IDC_PIC)->GetWindowRect(&g_dlgRec);
GetDlgItem(IDC_PIC)->GetParent()->ScreenToClient(&g_dlgRec);
GetDlgItem( IDC_PIC) ->GetClientRect( &m_picRect );
SetRect( m_picRect, g_dlgRec.left , g_dlgRec.top , g_dlgRec.left + m_unWidth , m_unHeight + g_dlgRec.top );
GetDlgItem(IDC_PIC)->MoveWindow(&m_picRect);
GetDlgItem(IDC_PIC)->GetWindowRect(&g_dlgRec);//获取控件相对于屏幕的位置
ScreenToClient(g_dlgRec);//
if( !m_pCurFrame ) return;
curImage.CopyOf( m_pCurFrame ); // 复制图片
picRec.left = 0;
picRec.top = 0;
picRec.right = m_unWidth;
picRec.bottom = m_unHeight;
curImage.DrawToHDC( m_hDC, &picRec ); // 将图片绘制到显示控件的指定区域内
// 这里显示的时候,图片会出现偏左的现象,我在Picture控件上
// 响应鼠标点击时,然后将鼠标点击的点对应图片上的
// 像素点变成红色,而这个点都会在鼠标点击的点的左下方