这篇主要是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.0\bin\dotnet20或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

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

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

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

Halcon 17与 c# 混合编程的更多相关文章

  1. halcon与C#混合编程进阶版

    这篇主要是C#和Halcon的混合编程,在此基础上对按键不同功能的划分,以及图片适应窗口和从本地打开图片. 新手来这里:http://www.cnblogs.com/badguy518/p/55150 ...

  2. C# Halcon混合编程中遇到的问题(一)

    目标平台 安装64位的halcon的情况下,目标平台必须使用x64而不能使用x86 目标框架 不能使用.Net Framework Client版本,有一些必须的程序集会缺失,测试使用.Net Fra ...

  3. C和C++混合编程中的extern "C" {}

    引言 在用C++的项目源码中,经常会不可避免的会看到下面的代码: 1 2 3 4 5 6 7 8 9 #ifdef __cplusplus extern "C" { #endif ...

  4. 【原创】Matlab.NET混合编程技巧之直接调用Matlab内置函数

                  本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新    Matlab和C#混合编程文章目录 :[目录]Matlab和C#混合编程文章目录 在我的上一篇文章[ ...

  5. matlab和C/C++混合编程--Mex

    最近的项目需要matlab和C的混合编程,经过一番努力终于完成了项目要解决的问题.现在就将Mex的一些经验总结一下,当然只是刚刚开始,以后随着学习的深入继续添加.首先讲讲写Mex的一些常规规定,然后我 ...

  6. 【转载】ANSYS的APDL与C语言混合编程(实例)

    原文地址:http://www.cnblogs.com/lyq105/archive/2010/05/04/1727557.html 本文讨论的不是利用C语言为ANSYS写扩展(或者说是用户子程序), ...

  7. 用c/c++混合编程方式为ios/android实现一个自绘日期选择控件(一)

    本文为原创,如有转载,请注明出处:http://www.cnblogs.com/jackybu 前言 章节: 1.需求描述以及c/c++实现日期和月历的基本操作 2.ios实现自绘日期选择控件 3.a ...

  8. matlab和C/C++混合编程--Mex (六)参数传递

    最近的项目需要matlab和C的混合编程,经过一番努力终于完成了项目要解决的问题.现在就将Mex的一些经验总结一下,当然只是刚刚开始,以后随着学习的深入继续添加.首先讲讲写Mex的一些常规规定,然后我 ...

  9. swift 与 OC 混合编程

    原文地址:http://www.cocoachina.com/swift/20150608/12025.html 一.解决问题 Swift项目需要使用封装好的Objective-c组件.第三方类库,苹 ...

随机推荐

  1. MySQL 相关记录

    删除courseID_tr之前: 新建之后: show create trigger: 下面是mysql-5.7.21-win64解压目录下的my.ini文件中的内容 [client] default ...

  2. excle中表引用

  3. hdu 1698 (延迟标记+区间修改+区间求和)

    In the game of DotA, Pudge's meat hook is actually the most horrible thing for most of the heroes. T ...

  4. Beff的学习

    Beff介绍 BeEF,全称The Browser Exploitation Framework,是一款针对浏览器的渗透测试工具. 首先打开kali,直接点击beef图标打开beef 浏览器会默认弹出 ...

  5. maven使用utf8等

    pom.xml: <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncodi ...

  6. Selenium3+python几种定位元素的方法

    学习小结: 这里使用ChromeV73+web driver 2.46 #几种定位方式: #Autotest.py from selenium import webdriver from seleni ...

  7. MySQL出现too many connections(1040)错误解决方法

    https://www.cnblogs.com/2881064178dinfeng/p/6938112.html 其实MySQL默认的最大连接数为100,可能在大访问量的时候造成了连接不上数据库.解决 ...

  8. vs2017 asp.net 网站发布问题 (发布路径下含源码文件)

    使用vs2010版本,网站发布后会自动将源码发不为.dll程序集,但vs2017需要进行设置,其他版本没有试过. vs2017网站发布: 1. 2. 这里给一个你想用的名字,之后它会出现在你的程序文件 ...

  9. 关于 lua table表存储函数且运用

    --table 是lua的一种数据结构用来帮助我们创建不同的数据类型.如:数组和字典--lua table 使用关联型数组,你可以用任意类型的值来做数组的索引,但这个值不能是nil--lua tabl ...

  10. 在<canvas>上绘制img(drawImage())时需要注意的事

    <canvas>标签相当于是一个画布,css决定画布的样式(这块画布的背景颜色.大小等),脚本(一般使用JavaScript)就是画笔,我们可以在这个画布上绘制线条.形状.文字.图片等. ...