Halcon 与C# 联合编程

Halcon用于开发图像处理程序时,通常需要使用其他软件编写图形化界面,Halcon提供了5种导出模板:C-Halcon/C、C++-Halcon/C++、C++-Halcon/C++(Halcon-10-legacy)、VB.NET- Halcon/.NET、C#- Halcon/.NET。

本文使用Halcon 12与Visual Studio 2017,创建基于.NET Framework 4.6.1(可以根据需要调整)的C# Windows窗口应用程序,调用导出的Halcon程序显示图片。

Halcon源程序:

*读取图片
read_image (Image, 'D:/Program Files/MVTec/HALCON-12.0/examples/images/cap_illumination/cap_illumination_05.png')
*显示图像
dev_display (Image)

创建好halcon程序后,在菜单栏找到“文件”选项下的“导出”按钮。

Halcon 与C# 联合编程_第1张图片

点击弹出如图所示对话框,选择程序导出位置以及导出语言。导出范围选择“程序”,“外部函数”选项用于导出创建的本地函数以及外部函数。

窗口导出,选择使用“导出模板”,如果选择“使用HALCON窗口”,则在程序运行时会自动创建一个Halcon的弹出窗口用于显示图像。

Halcon 与C# 联合编程_第2张图片

导出的C#程序:

//  File generated by HDevelop for HALCON/DOTNET (C#) Version 12.0
//
//  This file is intended to be used with the HDevelopTemplate or
//  HDevelopTemplateWPF projects located under %HALCONEXAMPLES%\c#

using System;
//引用halcon的.NET模块
using HalconDotNet;
//创建HDevelopExport类
public partial class HDevelopExport
{
  public HTuple hv_ExpDefaultWinHandle;
  //定义私有的方法
  // Main procedure 
  private void action()
  {
    // Local iconic variables 
    
    HObject ho_Image;
    // Initialize local and output iconic variables 
    HOperatorSet.GenEmptyObj(out ho_Image);
    ho_Image.Dispose();
    HOperatorSet.ReadImage(out ho_Image, "D:/Program Files/MVTec/HALCON-12.0/examples/images/cap_illumination/cap_illumination_05.png");

    HOperatorSet.DispObj(ho_Image, hv_ExpDefaultWinHandle);
    ho_Image.Dispose();

  }
  //初始化窗口函数
  public void InitHalcon()
  {
    // Default settings used in HDevelop 
    HOperatorSet.SetSystem("width", 512);
    HOperatorSet.SetSystem("height", 512);
  }
  //创建公有方法RunHalcon(HTuple Window)调用私有方法action(),HTuple Window为用于显示图像的halcon窗口句柄
  public void RunHalcon(HTuple Window) 
 {
    hv_ExpDefaultWinHandle = Window;
    action();
  }

}

下一步,使用Visual Studio 2017创建Windows窗口应用程序。

Halcon 与C# 联合编程_第3张图片

Halcon 与C# 联合编程_第4张图片

添加引用,找到X:\...\MVTec\HALCON-12.0\bin\dotnet3文件夹下的动态连接库文件:halcondotnet.dll。

Halcon 与C# 联合编程_第5张图片Halcon 与C# 联合编程_第6张图片

然后添加Halcon窗口控件,在工具箱选项卡中,右键点击“选择项”,弹出如下图所示窗口,点击浏览,找到X:\...\MVTec\HALCON-12.0\bin\dotnet3文件夹下的动态连接库文件:halcondotnet.dll,然后选中HWindowControl组建。

Halcon 与C# 联合编程_第7张图片

在工具箱中选择HWindowControl组建,创建halcon窗口,添加button按钮,如下图所示。

Halcon 与C# 联合编程_第8张图片

下面只需要在button按键单击事件中添加调用halcon导出程序,便可以实现显示图像的方法。

C#程序:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace h_show_img
{
    public partial class Form1 : Form
    {
        HDevelopExport HDevelop=new HDevelopExport(); //添加HDevelopExport类并实例化
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            HDevelop.RunHalcon(hWindowControl1.HalconWindow); //引用RunHalcon方法显示图像,hWindowControl1.HalconWindow为创建的halcon窗口句柄。
        }
    }
}

运行效果如下:

Halcon 与C# 联合编程_第9张图片

注意:

1.活动解决方案平台应该与安装的halcon相对应,如本文使用的是64位的halcon,应在配置管理器中将平台目标改为x64。

Halcon 与C# 联合编程_第10张图片

2.如果想让图像适应窗口,应该在halcon中添加dev_set_part方法。

你可能感兴趣的:(C#,H)