C#调用Halcon引擎实现联合
1.配置环境
1.1首先创建C#窗体程序
如果没有这个选项,按照如下方案操作,打开Vs Installer,按照红框进行操作
勾选这三个组件,然后点击右下角修改,重新打开vs 新建项目就能找到窗体应用程序
1.2新建项目后在项目解决方案窗口对应的下的引用右键,添加引用然后如图所示:
在halcon的安装路径下找到以下文件,选择,点击添加,环境就配置成功了
2.窗体程序控件布局
点击工具箱选择公共控件,依次选择Button,RichTextBox,HWindowControl,并调整到合适的大小
结果如下
如果找不到HWindowControl选项,就如下图所示进行操作
点击浏览
选择halcondotnet.dll点击打开
进行如图所示操作,公共控件里就出现了HWindowControl
然后双击对应的窗口控件进入控件对应的方法
3.程序及.hdev文件存放路径
.hdev存放在对应.exe文件的目录的新建HDEV下的
程序如下所示
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using HalconDotNet;
namespace WindowsFormsApp2
{
public partial class Form1 : Form
{
HDevEngine hengine;
//定义调用hdev程序的引擎
HDevProgram hprogram;
//定义Halcon程序
HDevProgramCall hprocall;
//定义hdev程序执行实例
HWindow window;
//定义hdev程序显示窗口
string hdevpath;
//定义存放hdev程序路径的字符串
public Form1()
{
InitializeComponent();
}
//定义日志输出方法
public void ReadLog(string log)
{
richTextBox1.AppendText(log);
}
//定义执行时窗口初始加载语句(双击窗体空白处进入此方法)
private void Form1_Load(object sender, EventArgs e)
{
string exePath = AppDomain.CurrentDomain.BaseDirectory;
//获取此程序.exe所在路径
hdevpath = exePath + "HDEV/击穿C#.hdev";
//设置hdev程序所在路径
}
//点击button1所发生的事件
private void button1_Click(object sender, EventArgs e)
{
try
{
window = hWindowControl1.HalconWindow;
//窗口绑定(窗口初始化)
//新建对应实例
hengine = new HDevEngine();
hprogram = new HDevProgram(hdevpath);
hprocall = new HDevProgramCall(hprogram);
}
catch(HDevEngineException Ex)
{
MessageBox.Show(Ex.Message, "HDevEngine Exception");
//弹出异常对话框
ReadLog(Ex.Message);
//输出异常日志
return;
}
ReadLog("窗口初始化成功!\n");
}
private void button3_Click(object sender, EventArgs e)
{
window = hWindowControl1.HalconWindow;
HRegion region = hprocall.GetIconicVarRegion("SelectedRegions1");
//获得hdev程序里SelectedRegions1变量内容
window.SetColor("red");
//窗口轮廓显示颜色设置为红色
window.DispObj(region);
//显示获得的区域
ReadLog("图片处理成功\n");
}
private void button2_Click(object sender, EventArgs e)
{
window = hWindowControl1.HalconWindow;
hprocall.Execute();
//执行hdev程序
var files = hprocall.GetCtrlVarTuple("ImageFiles");
//获得hdev程序里的同名参数并传递给files
HImage Image = hprocall.GetIconicVarImage("Image");
//获得hdev程序里的处理原图
Image.GetImageSize(out HTuple width, out HTuple height);
//获得图片尺寸
window.SetPart(0D, 0, height, width);
//图片显示时显示hdev程序里图片的大小
window.DispObj(Image);
//在窗口中显示图片
HTuple i = hprocall.GetCtrlVarTuple("i");
ReadLog(files[i] + "\n");
if (i == files.Length-1)
ReadLog("#########图片遍历完毕#########");
}
private void hWindowControl1_HMouseMove(object sender, HMouseEventArgs e)
{
window = hWindowControl1.HalconWindow;
}
}
}
最后的结果
帮助到你,给点赞呦!!!