关闭

MFC中多线程显示相机捕获图片

1142人阅读 评论(0) 收藏 举报
分类:
  • 值得注意的是图像控件ID不可以出现在线程函数中,所以在主类里再单独定义一个函数用于显示图像,然后在线程函数中调用它。
  • 一、首先在主类中声明图像显示函数
    void DrawPicToHDC(IplImage *img, UINT ID);
    PGRGuid guid;
    BusManager busMgr;
    Error error = busMgr.GetCameraFromIndex(0, &guid);
    Camera cam;
    IplImage *image = NULL;
    Image rawImage;
    Image convertedImage;
    void show_check();
    CStatic m_pic;
  • 在主类外部声明函数UINT ThreadFunc(LPVOID lpParam):
UINT ThreadFunc(LPVOID lpParam);
  • 二、在cpp文件本里声明运行控制变量m_bRun和定义show_check()函数:
volatile BOOL m_bRun;
void CtestDlg::show_check()
{
        Error error = cam.Connect(&guid);

        if (error != PGRERROR_OK)
        {
            AfxMessageBox(_T("相机连接失败!"));
        }
        while (m_bRun == TRUE)
        {

            // Start capturing images
            cam.StartCapture();
            cam.RetrieveBuffer(&rawImage);

            // Create a converted image
        rawImage.Convert(PIXEL_FORMAT_MONO8, &convertedImage);
        pimage = cvCreateImage(cvSize(1024, 768), IPL_DEPTH_8U, 1);
            (pimage->imageData) = (char*)(convertedImage.GetData());
            DrawPicToHDC(pimage, IDC_PIC);
            cvReleaseImage(&pimage);
        }

}
  • 三、添加开始和结束按钮响应函数:
void CtestDlg::OnBnClickedStart()
{
    error = cam.Connect(&guid);
    if (error != PGRERROR_OK)
    {
        AfxMessageBox(_T("相机连接失败!"));
    }

    cam.StartCapture();
    m_bRun = TRUE;
    GetDlgItem(IDC_START)->EnableWindow(FALSE);
    GetDlgItem(IDC_STOP)->EnableWindow(TRUE);
    hThread = AfxBeginThread(ThreadFunc,
        this);//创建一个新线程ThreadFunc
}

void CtestDlg::OnBnClickedStop()
{
    cam.StopCapture();
    error = cam.Disconnect();
    if (error != PGRERROR_OK)
    {
        AfxMessageBox(_T("相机断开失败!"));
    }
    m_bRun = FALSE;
    GetDlgItem(IDC_START)->EnableWindow(TRUE);
    GetDlgItem(IDC_STOP)->EnableWindow(FALSE);
}
  • 四、定义线程函数:
UINT ThreadFunc(LPVOID lpParam)
{
    CtestDlg* pInfo = (CtestDlg*)lpParam;//固定格式
    pInfo->show_check();//调用图像显示函数
    return 0;
}
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:14131次
    • 积分:423
    • 等级:
    • 排名:千里之外
    • 原创:29篇
    • 转载:0篇
    • 译文:0篇
    • 评论:3条
    最新评论