Halcon 17与 c# 混合编程

摘要:
本文主要介绍C#和Halcon的混合编程。在此基础上,它划分了按钮的不同功能,以及图片自适应窗口和本地打开图片。Halcon源程序:dev_ open_ window(0,0512512,'black',WindowHandle)read_ Image(Image,'C:\Users/Administrator/Desktop/cat.jpg')dev_ display(Image)get_ Image_siz
这篇主要是C#和Halcon的混合编程,在此基础上对按键不同功能的划分,以及图片适应窗口和从本地打开图片。
halcon源程序:
 
dev_open_window(0, 0, 512, 512, 'black', WindowHandle)
read_image (Image, 'C:/Users/Administrator/Desktop/猫.jpg')
dev_display(Image)
get_image_size(Image, Width, Height)
rgb3_to_gray(Image, Image, Image, ImageGray)
dev_display(ImageGray)
注意:写halcon程序时,如果过程中的图片需要显示出来,则需要在每个过程中都添加dev_display(**)

第一步:导出C#程序,建立项目,并添加此类

//
//  File generated by HDevelop for HALCON/DOTNET (C#) Version 10.0
//
//  This file is intended to be used with the HDevelopTemplate or
//  HDevelopTemplateWPF projects located under %HALCONEXAMPLES%c#
 
using System;
using HalconDotNet;
 
public partial class HDevelopExport
{
  public HTuple hv_ExpDefaultWinHandle;
 
  // Main procedure 
  private void action()
  {
 
    // Local iconic variables 
 
    HObject ho_Image, ho_ImageGray;
 
 
    // Local control variables 
 
    HTuple hv_Width, hv_Height;
 
    // Initialize local and output iconic variables 
    HOperatorSet.GenEmptyObj(out ho_Image);
    HOperatorSet.GenEmptyObj(out ho_ImageGray);
 
    //dev_open_window(...);
    ho_Image.Dispose();
    HOperatorSet.ReadImage(out ho_Image, "C:/Users/Administrator/Desktop/猫¨.jpg");
    HOperatorSet.DispObj(ho_Image, hv_ExpDefaultWinHandle);
    HOperatorSet.GetImageSize(ho_Image, out hv_Width, out hv_Height);
    ho_ImageGray.Dispose();
    HOperatorSet.Rgb3ToGray(ho_Image, ho_Image, ho_Image, out ho_ImageGray);
    HOperatorSet.DispObj(ho_ImageGray, hv_ExpDefaultWinHandle);
 
 
    ho_Image.Dispose();
    ho_ImageGray.Dispose();
 
  }
 
  public void InitHalcon()
  {
    // Default settings used in HDevelop 
    HOperatorSet.SetSystem("do_low_error", "false");
  }
 
  public void RunHalcon(HTuple Window)
  {
    hv_ExpDefaultWinHandle = Window;
    action();
  }
 
}
 

2.建立c#工程

在VS中新建一个c#工程,记住框架要选 .NET Framework 4,不要手贱看到还有高版本的4.5就跑去选4.5

在“设计”中完成以下设计: 
这里写图片描述 
如何添加按钮,在这里就不多说了。 
上面的那个控件是HWindowsControl。 
这里写图片描述

3.工具箱中添加Halcon窗口工具(首次使用需要)

如果是首次使用Halcon和c#混合编程,则需要向VS的工具箱中添加Halcon窗口工具HWindowControl。添加的方法是在“视图”->“工具箱”-> “所有Windows窗体”中右击,选择“选择项” 
这里写图片描述 
在弹出窗口中选择“浏览” 
这里写图片描述 
在MVTech安装目录下查找:halcon12.0indotnet20或dotnet35文件夹,我这里是选的dotnet35文件夹,应该是和VS的版本相匹配。 
找到文件夹下halcondotnet.dll添加即可。 
这里写图片描述

4.程序改写

接下来就是非常重要的程序改写阶段啦。 
首先在程序头添加

using HalconDotNet;

接下来是一个坑,向namespace中添加导出的Halcon c#代码时一定得注意:必须把导出的代码放在控件的代码段后面。否则就会弹个错!!! 
喏就是它了,public partial class HDevelopExport: 
这里写图片描述

最后一步就是改写按钮控件的事件响应:

        private void Open_Click(object sender, EventArgs e)
        {
            HDevelopExport HD = new HDevelopExport();
            HD.RunHalcon(hWindowControl1.HalconWindow);
        }

最后要注意,项目编译的时候,属性选X64 CPU
Halcon 17与 c# 混合编程第7张

Halcon 17与 c# 混合编程第8张

            写在后面的话 ,这里很重要,此乃精要所在

           编译程序时,目标平台使用AnyCPU  程序会自动崩溃无提示。单步跟踪会在这里出错: 
            this.hWindowControl1 = new HalconDotNet.HWindowControl(); 

Halcon 17与 c# 混合编程第9张

           原因是调用   halcondotnet.dll与 halcon.dll两Dll出现的错误,因为我没有装Halcon,只用到这两个Dll,  我用的Dll是64位的,所以编译的时候,目标平台使用X64 即可,

       Halcon 17与 c# 混合编程第10张

免责声明:文章转载自《Halcon 17与 c# 混合编程》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇CSS之使用display:inline-block来布局及浮动和inline-block的区别作用nopCommerce 3.9 大波浪系列 之 事件机制(生产者、消费者)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

用C#搭建IE BHO勾子, 取表单密码

授权CSDN, 请在征求同意后转载. 作者: 陈嘉, NetSecure Inc, Canada, 软件工程师 微软在1997年正式退出Browser Helper Object (BHO), 使程序员能够更好的对IE进行二次开发和操作. 在通过编写BHO程序数月后, 我希望把我的一些经验告诉才开始的同志, 避免走一些弯路. 我本人是非常喜欢C++的....

解决c# md5与php md5加密不一致的问题(md5(unicode))

最近在做一个项目,客户是用c#编写的桌面应用程序,他在后台添加用户,需要我用php做一款app实现用户的一些基本功能。 首先是登陆,客户直接添加的用户密码采用了md5加密方式,我在app登陆的时候取出数据进行验证,验证密码的时候,一直提示密码不正确,于是我打印出php md5('123456') :md5: e10adc3949ba59abbe56e057...

C# 根据绝对路径获取 带后缀文件名、后缀名、文件名、不带文件名的文件路径

C# 根据绝对路径获取 带后缀文件名、后缀名、文件名、不带文件名的文件路径 1、c#根据绝对路径获取 带后缀文件名、后缀名、文件名。 1 string str ="F: estDefault.aspx"; 2 string filename = System.IO.Path.GetFileName(str);//文件名 “...

【面试题】新东方.NET工程师面试题总结

1、学校几本(是否统招)、英语等级、大学成绩排名Top%几、当前月薪(入职前是否能提供薪资证明材料)、期望月薪 二本,统招英语四级排名top10 2、做过的项目技术栈是什么?(例如 .NET、Sql Server、Dapper、EF、Redis……) .NET、C#、EF、MVC、SQL Server、Oracle、WebService、API、SDK、R...

在C#和SQL Server数据库中怎么给DateTime类型赋null值、null和""的区别

今天在将数据库里的datetime类型数据赋给C#里DateTime类型变量的时候遇到一个问题,那就是数据库里面的datetime数据存在null值。 C#默认不能将null赋给DateTime变量,但是可以使用Nullable类型的DateTime,只需在声明变量的时候在DateTime后加一个?号,如: DateTime? x ; x便可以赋null值...

浅谈C#托管程序中的资源释放问题

终于开始动手写这篇文章了,有个网友催了我好几次,而我要么因为手头有事,要么就是被其他思路给叉开,以至这篇文章拖了好久还没开始写,今天终于可以静下心来完成它。   用了.net工具来写程序的人,不难发现它有个好处,就是使用的内存不用释放,尤其在使用C#或者VB.Net来写程序,因为程序所占用的内存都是受系统托管的,因此内存的释放不需要程序员去操心。   很多...