• Halcon 17与 c# 混合编程


    这篇主要是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

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

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

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

           

  • 相关阅读:
    20120109_1
    .NET(C#)开源代码分析
    Vue filter API All In One
    js 千位分隔符 All In One
    css fontfeaturesettings All In One
    vue 子组件不使用 watch 如何更新组件 All In One
    miro whiteboard All In One
    转载:sql注入的危害(登陆并获取数据库的名字,表的名称和字段)
    Windows 7/windows server 2008 R2 64位版IIS不能连接Access数据库,80004005报错的解决办法
    LINQ如何做SELECT TOP操作
  • 原文地址:https://www.cnblogs.com/88--88/p/9465035.html
Copyright © 2020-2023  润新知