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

原创 2015年11月18日 18:20:32
  • 值得注意的是图像控件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;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

MFC调用HALCON实现相机采图和图像显示

一、相机采图 二、图像显示 1、抓取单帧图像 m_Camera.SingleGrab(GetImage()); 2、显示图片 CHalconBase::uShowImageOrSize(GetMy...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

在MFC图片控件中打开摄像头实时拍照

1.功能简介 用大恒相机实时拍摄电池照片,然后根据模板对样品进行检测,然后根据模板进行匹配,结果匹配成功的进行画圈。 2.安装大恒相机的驱动,保证用自带软件可以打开相机 3.打开halcon12...

为什么类中的线程函数必须要声明静态?

之前也没注意到这问题,大家先搞清楚下面几个关键词吧: [cpp] view plaincopy class CMyTest   {   publ...

OpenGL进阶(十八) - 从零搭建基于SDL2的GLSL编辑框架

环境:Ubuntu 12.04 64bit编译assimp 版本3.0.1270Assimp(Open Asset Import Library)是一个支持读取多种模型资源的开源库,当前最新的版本是3...

2017.6.23 大恒相机初步了解二

今天进一步对程序内部的函数进行了解,方便接下来的程序解读。 1.结构 HV_SNAP_INFO 摄像机的工作状态 (当前设备 序号 用户定义参数) HV_SNAPPROC 回调函数的声明 H...

MFC多线程进行图片的显示

在MFC编程中开始学习都是只利用一个主线程,比较蛋疼的是,当你只用一个主线程进行如播放,查询时,MFC的界面会卡死,你无法进行其他的操作,这时需要进行多线程的编程,在操作时生成一个子线程来进行一些如播...

c#多线程快速显示多个图片,原创

  • 2009年06月15日 16:34
  • 4.78MB
  • 下载

MFC多线程对话框显示进度和状态

如,我要将一些当前程序的数据打印为PDF,这个过程需要一段时间,需要设置进度条,可以选择一个弹窗式的进度条。  建立共享变量 int m_process;//进度条进度,0-100 CStrin...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MFC中多线程显示相机捕获图片
举报原因:
原因补充:

(最多只允许输入30个字)