HA与c++MFC进行结合

使用HA与相机实时监控

在这里插入图片描述

在这里插入图片描述

建立相机连接

在这里插入图片描述

查看图像

在这里插入图片描述

生产代码

在这里插入图片描述

插入代码,代码为实时监控

在这里插入图片描述

导出c++代码

在这里插入图片描述

生成一个后缀为.cpp文件

在这里插入图片描述

cpp文件内容,已经变成了c++句法

在这里插入图片描述

用vs2010版先新建项目

在这里插入图片描述

构建MFC应用项目

在这里插入图片描述

MFC应用程序类型设置

在这里插入图片描述

会出现c++MFC程序项目

在这里插入图片描述

创建MFC后会出现页面

在这里插入图片描述

在这里插入图片描述

小框属性设置

在这里插入图片描述在这里插入图片描述

创建视觉小框

在这里插入图片描述

双击可以在可在cpp文件中增加代码进行增加和更改

在这里插入图片描述

单击可以修改框名称和ID

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

实时监控添加变量

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

上图增加的代码

//增加一个线程
CEvent exitGrabThread;

void Clwvision3Dlg::OnBnClickedCheckContinueGrab()
{
	// TODO: 在此添加控件通知处理程序代码
	UpdateData(TRUE);
	if(m_fContinueGrab)
	{
		AfxBeginThread(ContinueGrabThread,this);
	}
	else
	{
		exitGrabThread.SetEvent();
	}
}

//调用主对话框,调用抓图,显示

UINT Clwvision3Dlg::ContinueGrabThread(LPVOID p)
{
	Clwvision3Dlg *pThis = (Clwvision3Dlg *)p;
	while(WaitForSingleObject(exitGrabThread.m_hObject,2)!=WAIT_OBJECT_0)
	{
		GrabImage(&pThis->ho_Image,pThis->hv_AcqHandle);
		DispObj(pThis->ho_Image,pThis->hWndID);
	}
	return 0;
}

//保存图片

void Clwvision3Dlg::OnBnClickedButtonSaveImagb()
{
	// TODO: 在此添加控件通知处理程序代码
	if(m_fContinueGrab)
	{
		AfxMessageBox(_T("请先停止实时!"));
		return;
	}
	WriteImage(ho_Image,"bmp",0,"D:/c++/vs2010/Lwvision/lwvision3/20220101");
}

在这里插入图片描述

创建一个头文件定义变量

HalconCpp.h:HA文件
halconcpp.lib:HA文件

#ifndef SYSTEM_INCLUDE_H
#define SYSTEM_INCLUDE_H

#include "HalconCpp.h" 
#pragma comment(lib,"halconcpp.lib")
using namespace HalconCpp;

#endif

在这里插入图片描述

配置属性

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

编辑lwvision3Dlg.cpp程序

// lwvision3Dlg.cpp : 实现文件
//

#include "stdafx.h"
#include "lwvision3.h"
#include "lwvision3Dlg.h"
#include "afxdialogex.h"
#include  "SystemInclude.h"


#ifdef _DEBUG
#define new DEBUG_NEW 
#endif


// 用于应用程序“关于”菜单项的 CAboutDlg 对话框

class CAboutDlg : public CDialogEx
{
public:
	CAboutDlg();

// 对话框数据
	enum { IDD = IDD_ABOUTBOX };

	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

// 实现
protected:
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD)
{
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP()


// Clwvision3Dlg 对话框




Clwvision3Dlg::Clwvision3Dlg(CWnd* pParent /*=NULL*/)
	: CDialogEx(Clwvision3Dlg::IDD, pParent)
	, m_fContinueGrab(FALSE)
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void Clwvision3Dlg::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_STATIC_SHOW_WND, m_ctlShowWnd);
	DDX_Check(pDX, IDC_CHECK_CONTINUE_GRAB, m_fContinueGrab);
}

BEGIN_MESSAGE_MAP(Clwvision3Dlg, CDialogEx)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_CHECK_CONTINUE_GRAB, &Clwvision3Dlg::OnBnClickedCheckContinueGrab)
	ON_BN_CLICKED(IDC_BUTTON_SAVE_IMAGB, &Clwvision3Dlg::OnBnClickedButtonSaveImagb)
END_MESSAGE_MAP()


// Clwvision3Dlg 消息处理程序

BOOL Clwvision3Dlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	// 将“关于...”菜单项添加到系统菜单中。

	// IDM_ABOUTBOX 必须在系统命令范围内。
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		BOOL bNameValid;
		CString strAboutMenu;
		bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
		ASSERT(bNameValid);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
	//  执行此操作
	SetIcon(m_hIcon, TRUE);			// 设置大图标
	SetIcon(m_hIcon, FALSE);		// 设置小图标

	// TODO: 在此添加额外的初始化代码
	//打开相机
	//HTuple  hv_AcqHandle;
	OpenFramegrabber("DirectShow", 1, 1, 0, 0, 0, 0, "default", 8, "rgb", -1, "false", "default", "[0]  Camera MV-UB500#CC5CCDD3-4", 0, -1, &hv_AcqHandle);
	//开窗口
	CRect rct;
	//获取静态框矩形
	m_ctlShowWnd.GetClientRect(rct);
	//得到矩形的宽和高
	long lWindowID=0;
	long m_nPicWidth=rct.Width();
	long m_nPicHeight=rct.Height();
	//获取矩形框的句柄
	lWindowID = (long)m_ctlShowWnd.GetSafeHwnd();
	//开一个窗口大小就是设定的大小,
	OpenWindow(0,0,(Hlong)m_nPicWidth,(Hlong)m_nPicHeight,lWindowID,"visible","",&hWndID);
	//采图
	GrabImage(&ho_Image, hv_AcqHandle);
	//显示
	HTuple hW,hH;
	GetImageSize(ho_Image,&hW,&hH);
	SetPart(hWndID,0,0,hH,hW);
	DispObj(ho_Image,hWndID);

	//CloseFramegrabber(hv_AcqHandle);
	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

void Clwvision3Dlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialogEx::OnSysCommand(nID, lParam);
	}
}

// 如果向对话框添加最小化按钮,则需要下面的代码
//  来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
//  这将由框架自动完成。

void Clwvision3Dlg::OnPaint()
{
	if (IsIconic())
	{
		CPaintDC dc(this); // 用于绘制的设备上下文

		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

		// 使图标在工作区矩形中居中
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// 绘制图标
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialogEx::OnPaint();
	}
}

//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR Clwvision3Dlg::OnQueryDragIcon()
{
	return static_cast<HCURSOR>(m_hIcon);
}

//void Clwvision3Dlg::OnBnClickedCancel()
//{
//	CloseFramegrabber(hv_AcqHandle);
//	CDialogEx::OnCancel();
//}


//增加一个线程
CEvent exitGrabThread;

void Clwvision3Dlg::OnBnClickedCheckContinueGrab()
{
	// TODO: 在此添加控件通知处理程序代码
	UpdateData(TRUE);
	if(m_fContinueGrab)
	{
		AfxBeginThread(ContinueGrabThread,this);
	}
	else
	{
		exitGrabThread.SetEvent();
	}
}

//调用主对话框,调用抓图,显示

UINT Clwvision3Dlg::ContinueGrabThread(LPVOID p)
{
	Clwvision3Dlg *pThis = (Clwvision3Dlg *)p;
	while(WaitForSingleObject(exitGrabThread.m_hObject,2)!=WAIT_OBJECT_0)
	{
		GrabImage(&pThis->ho_Image,pThis->hv_AcqHandle);
		DispObj(pThis->ho_Image,pThis->hWndID);
	}
	return 0;
}

//保存图片

void Clwvision3Dlg::OnBnClickedButtonSaveImagb()
{
	// TODO: 在此添加控件通知处理程序代码
	if(m_fContinueGrab)
	{
		AfxMessageBox(_T("请先停止实时!"));
		return;
	}
	WriteImage(ho_Image,"bmp",0,"D:/c++/vs2010/Lwvision/lwvision3/20220101");
}

增加一个头文件SystemInclude.h

在这里插入图片描述

增加相机连接和窗口

在这里插入图片描述

头文件lwvision3Dlg.h

// lwvision3Dlg.h : 头文件
//

#pragma once
#include "afxwin.h"
#include  "SystemInclude.h"

// Clwvision3Dlg 对话框
class Clwvision3Dlg : public CDialogEx
{
// 构造
public:
	Clwvision3Dlg(CWnd* pParent = NULL);	// 标准构造函数

// 对话框数据
	enum { IDD = IDD_LWVISION3_DIALOG };

	protected:
	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV 支持


// 实现
public:
//控制变量
	HTuple hv_AcqHandle;
	
	HTuple hWndID;
//图像变量
	HObject ho_Image;
//开起一个实习监控的线程
private:
	static UINT ContinueGrabThread(LPVOID p);

protected:
	HICON m_hIcon;

	// 生成的消息映射函数
	virtual BOOL OnInitDialog();
	afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
	afx_msg void OnPaint();
	afx_msg HCURSOR OnQueryDragIcon();
	DECLARE_MESSAGE_MAP()
public:
	CStatic m_ctlShowWnd;
	BOOL m_fContinueGrab;
	afx_msg void OnBnClickedCheckContinueGrab();
	afx_msg void OnBnClickedButtonSaveImagb();
};

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

枭玉龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值