Halcon 学习笔记九:MFC+halcon联合

一、halcon导出cpp文件

首先在halcon中,读取图片,获得图片宽高,打开窗口,显示图片(如果不调用,在c++中无法显示)

read_image (Image, 'C:/Users/xuheding/Desktop/图片/5.png')
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width/2, Height/2, 'black', WindowHandle)
dev_display (Image)

然后导出
在这里插入图片描述
可以看到a.cpp文件,就是我们刚才导出的文件
在这里插入图片描述
action里面就是我们主要的内容
在这里插入图片描述

二、新建工程

打开VS2019,选择创建新项目,MFC应用程序,应用程序类型,选择基于对话框
1.然后修改窗体的名字,选择窗体,右击,属性,找到描述文字,修改为“图像采集显示”
2.托一个picture control,用来显示图片
3.托一个Button,描述文字修改为采集显示

在这里插入图片描述

三、配置

注意64位和32位的区别,不然是没法配置成功的。

1.首先配置头文件 .h

点击项目-》属性-》c/c++ -》常规 -》附加包含目录
将这两个目录进行添加
在这里插入图片描述
2. 配置链接器库目录 lib文件

点击链接器->常规->附加库目录
在这里插入图片描述
这一步仅仅是添加了库的目录,现在把想要用的lib文件添加进去

在链接器->输入->附加依赖项中 添加要使用的库文件
在这里插入图片描述

3.配置动态链接库 dll

进入C:\Program Files\MVTec\HALCON-18.11-Progress\bin\x64-win64
把所有的dll拷贝到当前工程的目录下,当然我们不是所有的都用到,只用到部分dll。

在这里插入图片描述
在这里插入图片描述
还有一种方法是把C:\Program Files\MVTec\HALCON-18.11-Progress\bin\x64-win64加入到环境变量中去

四、测试是否配置成功

在这里插入图片描述
在dlg结尾的文件中,添加头文件和命名空间
在这里插入图片描述

然后可以测试下能不能用了

添加全局变量

HObject  ho_Image;
HTuple  hv_Width, hv_Height, hv_WindowHandle;

在按钮点击事件下添加

(注意ReadImage的路径下不能有中文)

void CMFCApplication1Dlg::OnBnClickedButton1()
{
	// TODO: 在此添加控件通知处理程序代码
	ReadImage(&ho_Image, //'C:/Users/xuheding/Desktop/image/5.png'
		"C:/Users/xuheding/Desktop/image/5.png");
	
}

点击 生成->重新生成解决方案,若通过即可

五、添加程序

然后把剩下的拷贝过去
在这里插入图片描述
在单击显示按钮下面

void CMFCApplication1Dlg::OnBnClickedButton1()
{
	// TODO: 在此添加控件通知处理程序代码
	ReadImage(&ho_Image, "C:/Users/xuheding/Desktop/image/5.png");

	GetImageSize(ho_Image, &hv_Width, &hv_Height);
	SetWindowAttr("background_color", "black");
	OpenWindow(0, 0, hv_Width / 2, hv_Height / 2, 0, "visible", "", &hv_WindowHandle);
	HDevWindowStack::Push(hv_WindowHandle);
	if (HDevWindowStack::IsOpen())
		DispObj(ho_Image, HDevWindowStack::GetActive());
}

会发现图像显示在想要的窗口外边
在这里插入图片描述
因此要添加窗口的句柄上去
点击Picture Control的属性,更换ID
在这里插入图片描述
添加句柄

	//创建PictureControl的句柄
	HWND hwndl;
	hwndl = GetDlgItem(IDC_PIC)->m_hWnd;
	LONG lWWindowID = (LONG)hwndl;
	//将句柄0替换成想要的窗体的句柄
	OpenWindow(0, 0, hv_Width / 2, hv_Height / 2, lWWindowID, "visible", "", &hv_WindowHandle);
	//OpenWindow(0, 0, hv_Width / 2, hv_Height / 2, 0, "visible", "", &hv_WindowHandle);

在这里插入图片描述
由于图像比较大,而窗口比较小,图像没法显示全

那就只能通过限制打开的窗口大小,为图片控件的大小,那样显示的图片就会占据整个控件


void CMFCApplication1Dlg::OnBnClickedButton1()
{
	// TODO: 在此添加控件通知处理程序代码
	ReadImage(&ho_Image, "C:/Users/xuheding/Desktop/image/5.png");

	GetImageSize(ho_Image, &hv_Width, &hv_Height);
	SetWindowAttr("background_color", "black");

	//创建PictureControl的句柄
	HWND hwndl;
	hwndl = GetDlgItem(IDC_PIC)->m_hWnd;
	LONG lWWindowID = (LONG)hwndl;

	//获取PictureControl窗口大小
	CRect rect;
	GetDlgItem(IDC_PIC)->GetWindowRect(&rect);
	m_w[0] = rect.Width();//m_w为HTuple类型,只装一个值,所以取索引0
	m_h[0] = rect.Height();

	//将句柄0替换成想要的窗体的句柄
	OpenWindow(0, 0, m_w, m_h, lWWindowID, "visible", "", &hv_WindowHandle);
	//OpenWindow(0, 0, hv_Width/2, hv_Height/2, 0, "visible", "", &hv_WindowHandle);

	HDevWindowStack::Push(hv_WindowHandle);
	if (HDevWindowStack::IsOpen())
		DispObj(ho_Image, HDevWindowStack::GetActive());

}

在这里插入图片描述

如果今后的例子中出现了图像只显示了部分
在这里插入图片描述

  • 9
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

菊头蝙蝠

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

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

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

打赏作者

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

抵扣说明:

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

余额充值