C#中调用halcon引擎来执行hdev程序

调用halcon引擎有两个直接的好处:

  • 避免C# 与halcon代码混编时可能产生的内存泄露问题

  • 修改halcon程序时不用重新编译C# 

 

勇哥写了一个示例,详细的应用感受和缺点限制勇哥会持续做相关的总结给大家分享。

对于halcon17来说,要运行下面的程序,你要引用

C#

halcondotnet.dll
hdevenginedonet.dll

 

image.png

 

image.png

C#

using HalconDotNet;
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;namespace WindowsFormsApp1
{public partial class Form1 : Form{private HDevEngine engine = new HDevEngine();private HDevProgramCall programCall;private string programPath;private string procedurePath;private HDevOpMultiWindowImpl MyHDevOperatorImpl;public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){var path1 = "drawCircle";if (initialengine(path1)){loadengine(); inspectengine();}}public bool initialengine(string filename){programPath = System.Environment.CurrentDirectory + @"\" + filename + ".hdev";procedurePath = System.Environment.CurrentDirectory + @"\";if(!File.Exists(programPath)){MessageBox.Show("file not exist");return false;}if (!HalconAPI.isWindows){programPath = programPath.Replace("\"", "/");procedurePath = procedurePath.Replace("\"", "/");}engine.SetProcedurePath(procedurePath);// viewPort.HalconWindow.SetLineWidth(4);MyHDevOperatorImpl = new HDevOpMultiWindowImpl(hWindowControl1.Handle);engine.SetHDevOperators(MyHDevOperatorImpl);return true;}public void loadengine(){try{HDevProgram program = new HDevProgram(programPath);programCall = new HDevProgramCall(program);}catch { }}public void disposeengine(){try{programCall.Dispose();}catch { }}public void inspectengine(){try{programCall.Execute();}catch { }}}
}

 

halcon代码如下,只是简单的画了一个圆。

C#

px:=280
py:=300
r:=200xary:=[]
yary:=[]
step:=2
for Index := 0 to 360/step by stepx:=px+px/2*cos(rad(step*Index+step))y:=py+py/2*sin(rad(step*Index+step))xary[Index/step]:=xyary[Index/step]:=ydisp_polygon(200000, xary, yary)
endfor

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/252116.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ASP.NET Core部署到Linux服务器(CentOS7 x64)

前言 本文主要讲解如何一步步将ASP.NET Core网站发布到Linux服务器,文中会讲解具体步骤及需要避免的各种问题。 目录 一、环境介绍 二、创建及发布ASP.NET Core网站项目 三、服务器软件安装(.NET Core SDK) 四、在服务器上部署ASP.NET Core网…

Python3.5以上版本lxml导入etree报错Unresolved reference

Web抓取Web站点使用HTML描述,这意味着每个web页面是一个结构化的文档。有时从中 获取数据同时保持它的结构是有用的。web站点不总是以容易处理的格式, 如 csv 或者 json 提供它们的数据。 这正是web抓取出场的时机。Web抓取是使用计算机程序将web页面数据…

其它综合-CentOS7 忘记root密码

CentOS7 忘记root密码 长时间不用的 CentOS 机器再次开机的时候忽然忘记了密码,总不能就重装一台吧,还有好多服务在机器上,于是决定重置root的密码。   如果是已经开启的机器,需要进行关闭,重新启动。在启动选择内核…

spring boot高性能实现二维码扫码登录(中)——Redis版

前言 本打算用CountDownLatch来实现,但有个问题我没有考虑,就是当用户APP没有扫二维码的时候,线程会阻塞5分钟,这反而造成性能的下降。好吧,现在回归传统方式:前端ajax每隔1秒或2秒发一次请求,去…

C# :socket 通讯基础使用实例

们在讲解Socket编程前,先看几个和Socket编程紧密相关的概念: TCP/IP层次模型当然这里我们只讨论重要的四层 01,应用层(Application):应用层是个很广泛的概念,有一些基本相同的系统级TCP/IP应用以及应用协议&#xff0…

PHP + NGINX 控制视频文件播放,并防止文件下载

最简单的方法是使用NGINX的 internal 功能 server { listen 80; server_name www.xxx.com;  location / { index index.php index.html index.htm; root /xxx; if (!-e $request_filename) { rewrite ^/index.php(.*)$ /index.php?s$…

C#:委托基础与事件

通过以下思维导图,学习委托的基本概念,后面着重讲解委托的运用,希望通过最简单的方式收获更多的知识。 1.委托的各种写法 1、委托 委托名new 委托(会调用的方法名); 委托名(参数); 2、委托 委托名 会调用…

Django基本命令

Django基本命令 1.创建一个Django 项目 django_admin.py startproject mysite当前目录下会生成mysite的工程,目录结构如下: manage.py ----- Django项目里面的工具,通过它可以调用django shell和数据库等。settings.py ---- 包含了项目的默认…

reactor模式:多线程的reactor模式

上文说到单线程的reactor模式 reactor模式:单线程的reactor模式 单线程的reactor模式并没有解决IO和CPU处理速度不匹配问题,所以多线程的reactor模式引入线程池的概念,把耗时的IO操作交由线程池处理,处理完了之后再同步到selecti…

Elasticsearch实战篇——Spring Boot整合ElasticSearch

2019独角兽企业重金招聘Python工程师标准>>> 当前Spring Boot很是流行,包括我自己,也是在用Spring Boot集成其他框架进行项目开发,所以这一节,我们一起来探讨Spring Boot整合ElasticSearch的问题。 本文主要讲以下内容…

Python: pip升级报错了:You are using pip version 10.0.1, however version 20.3.3 is available.

1,Python使用命令:python -m pip install --upgrade pip升级pip的时候报了下面这个错 2,换了个命令: python -m pip install --upgrade pip -i https://pypi.douban.com/simple 更新成功了,但又报了一个新的错误: AttributeError:…

新手上路之Hibernate:第一个Hibernate例子

一、Hibernate概述 (一)什么是Hibernate? Hibernate核心内容是ORM(关系对象模型)。可以将对象自动的生成数据库中的信息,使得开发更加的面向对象。这样作为程序员就可以使用面向对象的思想来操作数据库&…

模板标签及模板的继承与引用

1.常用的模板标签 - 作用是什么:提供各种逻辑 view.py: def index(request):#模板标签 --常用标签 总结:语法 {% tag %} {% endtag %} {% tag 参数 参数 %} 示例 展示页index.html,包含for标签,if标签,url标签 {% extends teacher…

Golang实现一个密码生成器

小地鼠防止有人偷他的果实,在家里上了一把锁。这个锁怎么来的呢?请往下看。。 package mainimport ("flag""fmt""math/rand""time" )var (length intcharset string )const (NUmStr "0123456789"C…

C# WPF:初识布局容器

StackPanel堆叠布局 StackPanel是简单布局方式之一&#xff0c;可以很方便的进行纵向布局和横向布局 StackPanel默认是纵向布局的 <Window x:Class"WpfApplication1.MainWindow" xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation" …

Kibana源码分析--Hapijs路由设置理解笔记

【ES6解构赋值】&#xff1a;https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment 【Joi APi】&#xff1a;https://github.com/hapijs/joi/blob/v13.1.2/API.md 转载于:https://www.cnblogs.com/lishidefengchen/p/866874…

Python打包EXE神器 pyinstaller

最近由于项目需要&#xff0c;以前的python文件需要编辑为EXE供前端客户使用。 由于最早接触的是distutils&#xff0c;所以一开始准备使用distutils和py2exe搭配来进行python的exe化&#xff0c;也就是传统的使用setup.py的方式来进行exe安装。但是结果都不是很好&#xff0c;…

20种PLC元件编号和Modbus编号地址对应表

1、三菱&#xff1a; X元件支持Modbus之02功能码&#xff1b; Y元件支持Modbus之01、05、15功能码&#xff1b; D元件支持Modbus之03、06、16功能码。 2、西门子&#xff1a; I元件支持Modbus之02功能码&#xff1b; Q元件支持Modbus之01、05、15功能码&#xff1b; V元件…

暑期学习

由于最后大作业的呈现情况与短学期所完成的还相差甚远&#xff0c;所以在暑期的时候开始进一步的细化。 在这个过程之中产生了如下的问题&#xff1a; 已解决的有&#xff1a; 1.用a标签在同一页面实现跳转。 要点&#xff1a;标记<a href"../home#pre">的时候…

五、RabbitMQ的消息属性(读书笔记)

2019独角兽企业重金招聘Python工程师标准>>> 简介 当使用RabbitMQ发布消息时&#xff0c;消息又AMQP规范中的三个低层帧类型组成&#xff1a; Basic.publish方法帧&#xff1b;内容头帧&#xff1b;消息体帧&#xff1b;这三种帧类型按顺序一起工作&#xff0c;以便…