MFC VS2017和Halcon17 聯合編程,利用Halcon助手在PictureControl 連續採集顯示攝像機圖片

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章