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;
}