15,471
社区成员
发帖
与我相关
我的任务
分享
protected:
CWinThread* pThread;
UINT ThreadSpeed(LPVOID lpParameter);//线程函数的声明 此行在类外
//下面是BOOL CVideoToPictureDlg::OnInitDialog()函数中关于初始化的代码:
m_ctrlProgress.SetRange(0,100);
//设置进度条的每一步的增量
m_ctrlProgress.SetStep(1);
//设置进度条的当前位置
m_ctrlProgress.SetPos(1);
m_ctrlProgress.SendMessage(PBM_SETBKCOLOR, 0, RGB(255, 255, 255));//背景色
m_ctrlProgress.SendMessage(PBM_SETBARCOLOR, 0, RGB(0, 255, 0));//前景色
waitKey();
return TRUE;
//下面是点击开始键的响应函数:
void CVideoToPictureDlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
if(infilename.IsEmpty())
{
MessageBox("请选择视频文件", "提示",MB_OK);
return;
}
else if(outfilename.IsEmpty())
{
MessageBox("请选择输出文件夹", "提示",MB_OK);
return;
}
CvCapture* capture = cvCreateFileCapture((LPSTR)(LPCTSTR)infilename);
IplImage* frame;
int i = 0;
char image_name[20];
CString Out;
//pThread = AfxBeginThread(ThreadSpeed, &m_ctrlProgress);
int numFrames = (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_COUNT);
while(1)
{
frame = cvQueryFrame(capture);
if(!frame) break ;
sprintf_s(image_name, "%s%d%s", "image", ++i, ".jpg");//保存的图片名
CString str3;
str3.Format("%s",image_name);
CString str2 = _T("\\");
Out = outfilename + str2 + str3;
cvSaveImage((LPSTR)(LPCTSTR)Out, frame); //保存一帧图片
int jindu = (i * 100)/numFrames;
percent = jindu;
pThread = AfxBeginThread(ThreadSpeed, &m_ctrlProgress);//此处创建新线程
}
MessageBox("已完成提取", "提示",MB_OK);
cvReleaseCapture(&capture);
}
//下面是线程函数
UINT ThreadSpeed(LPVOID lpParameter)
{
CProgressCtrl *Speed = (CProgressCtrl*)lpParameter;
Speed->SetPos((percent));
Sleep(10);
return 0;
}