VS2017
Halcon 17
MFC
使用笔记本自带的摄像机连续采集,显示在MFC的PictureControl控件
主要方法就是确认的时候,开启一个新的线程去采集
PictureControl 的ID :IDC_STATIC
CYunClassDlg.h文件
# include "HalconCpp.h" # include "HDevThread.h" using namespace HalconCpp; public: afx_msg void OnBnClickedCapture(); //采集按钮 afx_msg void OnBnClickedButtonCancel();//取消按钮 HTuple hv_WindowHandle; HObject ho_Image; HTuple HWindowID;//Picture Control 控件 HTuple m_HWindowID; //H CWnd * pWnd; bool StartImageState;//是否采集 static UINT StartCameraThread(LPVOID pParam);//新的采集线程CYunClassDlg.cpp文件OnInitDialog
CRect Rect; pWnd = GetDlgItem(IDC_STATIC); HWindowID = (Hlong)pWnd->m_hWnd;//获取父窗口句柄 pWnd->GetWindowRect(&Rect); OpenWindow(0, 0, Rect.Width(), Rect.Height(), HWindowID, "visible", "", &m_HWindowID);
CYunClassDlg.cpp文件
//开始采集 void CYunClassDlg::OnBnClickedCapture() { //开启新线程处理 if(!StartImageState) AfxBeginThread(StartCameraThread,this,THREAD_PRIORITY_NORMAL,0,0,NULL); } UINT CYunClassDlg::StartCameraThread(LPVOID pParam) { CYunClassDlg *pDlg = (CYunClassDlg*) pParam; HTuple hv_Width; HTuple hv_Height; HTuple hv_AcqHandle; OpenFramegrabber("DirectShow", 1, 1, 0, 0, 0, 0, "default", 8, "rgb", -1, "false", "default", "[0] Integrated Camera", 0, -1, &hv_AcqHandle); GrabImageStart(hv_AcqHandle, -1); pDlg->StartImageState = true; while (pDlg->StartImageState) { GrabImageAsync(&(pDlg->ho_Image), hv_AcqHandle, -1); GetImageSize(pDlg->ho_Image, &hv_Width, &hv_Height); SetPart(pDlg->m_HWindowID, 0, 0, hv_Height, hv_Width); DispObj(pDlg->ho_Image, pDlg->m_HWindowID); } CloseFramegrabber(hv_AcqHandle); AfxEndThread(0); return 0; } //停止采集 void CYunClassDlg::OnBnClickedButtonCancel() { StartImageState = false; }