WPF+Halcon 培训项目实战 完结(13):HS 鼠标绘制图形

文章目录

  • 前言
  • 相关链接
  • 项目专栏
  • 运行环境
  • 匹配图片
  • 矩形鼠标绘制
    • Halcon添加右键事件
    • Task封装
    • 运行结果
    • 个人引用问题
      • 原因推测
  • 圆形鼠标绘制
    • 代码
    • 运行结果
  • 课程完结:

前言

为了更好地去学习WPF+Halcon,我决定去报个班学一下。原因无非是想换个工作。相关的教学视频来源于下方的Up主的提供的教程。这里只做笔记分享,想要源码或者教学视频可以和他联系一下。

相关链接

微软系列技术教程 WPF 年度公益课程

Halcon开发 CSDN博客专栏

个人学习的Gitee 项目地址仓库

项目专栏

WPF+Halcon实战项目

运行环境

  • .net core 8.0
  • visual studio 2022
  • halcon HDevelop 20.11
  • windows 11

匹配图片

在这里插入图片描述

矩形鼠标绘制

在Halcon中绘制分为三种方式:

  • 直接绘制
  • 生成之后拖动缩放
  • 鼠标直接框选

前两种方式之前的博客已经讲解过了,这次我们讲解第三种方式。

Halcon添加右键事件

Halcon DrawRegion()后会阻塞直到右键按下,请问如何主动取消绘制区域

我们需要右键的时候取消Halcon绘制事件

在这里插入图片描述

Task封装

在Halcon中,绘制图案是会导致UI线程锁死的。这里我们需要用到Task任务

C# Task任务详解

添加Halcon任务

  /// <summary>/// 绘制图片,返回回调函数/// </summary>/// <param name="callback"></param>/// <returns></returns>public override Task Draw(Action callback){//防止出现多个鼠标绘制任务。强制前一个任务放开HalconAPI.CancelDraw();HTuple row1 = new HTuple();HTuple row2 = new HTuple();HTuple column1 = new HTuple();HTuple column2 = new HTuple();//double row1,row2,column1,column2;HOperatorSet.DrawRectangle1(WindowControlWPF.HalconWindow, out row1, out column1, out row2, out column2);//WindowControlWPF.HalconWindow.DrawRectangle1(out row1, out column1, out row2, out column2);Row1 = row1;Row2 = row2;Column1 = column1;Column2 = column2;//获取接触的ROI区域Reduce();callback();return Task.CompletedTask;}

按钮点击事件

private void DrawRectByMouse(){HRectangleObjByMouse = new HRectangleObj(HalconWindow, hImage);//新建异步,防止阻塞UITask.Run(() => HRectangleObjByMouse.Draw(() =>{//打印绘制结果MsgHelper.Success("鼠标绘图绘制成功!" + HRectangleObjByMouse.ToString());}));}

运行结果

在这里插入图片描述

个人引用问题

我写代码的时候出现了一个空值的异常,非常的奇怪

C#怎么判断2个对象引用的是同一个地址

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

按理来说的添加的HalconWindow是引用类型,引用类型存的相对应用的空间应该是一样的。

原因推测

初始HS
Rect.HS赋值
初始HS指向新的HS,是开辟了一个新的空间
Rect.HS和初始的HS赋值不同

内存地址简称n,person1的内存地址简称n1


//p1 = n1Person person1 = new Person();//p2 = n2Person person2 = new Person();//p3 = n3Person person3 = new Person();//p3= n1person3 = person1;
// p1 = n2person1 = person2;//比较p1和p3,因为p1和p3的内存指向发生了变化,p1=n2,p3=n1,所以内存地址不同,不是同一个对象Console.WriteLine(object.ReferenceEquals(person1,person3)); //False

圆形鼠标绘制

代码

圆形绘制代码

     public override Task Draw(Action callback){//防止出现多个鼠标绘制任务。强制前一个任务放开HalconAPI.CancelDraw();HTuple row = new HTuple();HTuple column = new HTuple();HTuple radius = new HTuple();//double row1,row2,column1,column2;HOperatorSet.DrawCircle(WindowControlWPF.HalconWindow, out row, out column, out radius);//WindowControlWPF.HalconWindow.DrawRectangle1(out row1, out column1, out row2, out column2);Row = row;Column = column;Radius = radius;//获取接触的ROI区域Reduce();callback();return Task.CompletedTask;}

圆形鼠标绘制按钮

        private void DrawCircleByMouse(){HCircleObjByMouse = new HCircleObj(HalconWindow, hImage);MsgHelper.Info("请添加鼠标绘制任务!");//新建异步,防止阻塞UITask.Run(() => HCircleObjByMouse.Draw(() =>{//打印绘制结果MsgHelper.Success("鼠标绘图绘制成功!" + HCircleObjByMouse.ToString());}));}

运行结果

在这里插入图片描述

课程完结:

我们的Halcon部分代码已经全部结束了。后面主要就是讲解偏WPF的相关开发。我这个记录只是做一个思路,就是跑通WPF和Halcon对接的一些功能。后面的往上做就是把WPF部分或者Halcon部分往上做了。这里就不做更多的说明了。

个人目前的安排就是去了解一些OpenCV。了解就是OpenCV是怎么跑的,怎么用的,环境怎么配置。Python也顺便了解一下。

目前个人的打算是明年3月份左右开始找工作,顺利的话大概4月份就能入职了。再干个一两年看看,实在不行就回家摆烂了。

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

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

相关文章

记一次Oracle Cloud计算实例ssh恢复过程

#ssh秘钥丢失# &#xff0c; #Oracle Cloud# 。 电脑上的ssh秘钥文件不知道什么时候丢失了&#xff0c;直到用的时候才发现没有了&#xff0c;这下可好&#xff0c;Oracle Cloud的计算实例连不上了&#xff0c;这个实例只能通过ssh连接上去&#xff1a; 以下是解决步骤&#x…

【PTA-C语言】编程练习6 - 结构体与共用体 - 函数题

如果代码存在问题&#xff0c;麻烦大家指正 ~ ~有帮助麻烦点个赞 ~ ~ 编程练习6 - 结构体与共用体 - 编程题 7-1 查找书籍&#xff08;分数 20&#xff09;7-2 一帮一&#xff08;分数 15&#xff09;7-3 计算职工工资&#xff08;分数 15&#xff09; 7-1 查找书籍&#xff08…

72内网安全-域横向CSMSF联动及应急响应知识

拿到才行&#xff0c;拿不到就是多余的 案例一MSF&CobaltStrike 联动 Shell 有一些功能可能cs或者msf强大一些&#xff0c;他们两个可以相互调用&#xff0c;在真实情况下也是可以cs和msf同时启动的&#xff0c; cs移交给msf .创建Foreign监听器 “Listeners”“Add”…

Portraiture4.1汉化版PS磨皮插件(支持原生m1芯片m2)

Portraiture汉化版PS磨皮插件。本期推荐一款全新ai算法ps2024中文汉化版ps磨皮插件Portraiture 4.1.2美颜滤镜安装包最新版ps调整肤色插件! 全新Portraiture 4.1.2版本PS人像修图美颜磨皮插件&#xff0c;升级AI算法&#xff0c;并支持多人及全身磨皮美化模式&#xff0c;推荐…

Python爬虫---selenium基本使用

为什么使用selenium&#xff1f; 使用urllib.request.urlopen()模拟浏览器有时候获取不到数据,所以使用selenium (1) selenium是一个用于web应用程序测试的工具 (2) selenium 测试直接运行在浏览器中&#xff0c;就像真正的用户在操作一样 (3) 支持通过各种driver (FirfoxDri…

appium入门基础

介绍 appium支持在不同平台的UI自动化&#xff0c;如web,移动端,桌面端等。还支持使用java&#xff0c;python&#xff0c;js等语言编写自动化代码。主要用于自动化测试脚本&#xff0c;省去重复的手动操作。 Appium官网 安装 首先必须环境有Node.js用于安装Appium。 总体来…

c盘扩容时,d盘无法删除卷问题

C盘扩容时&#xff0c;磁盘管理中D盘右键无法删除卷的原因 首先&#xff0c;D盘下文件夹为空&#xff0c;但是显示可用空间不是100%&#xff0c;经过排查&#xff0c;发现是虚拟内存设置在了D盘导致无法删除卷&#xff0c;这里只需要将虚拟内存放到其他盘&#xff0c;如E盘即可…

骑砍战团MOD开发(29)-module_scenes.py游戏场景

骑砍1战团mod开发-场景制作方法_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Cw411N7G4/ 一.骑砍游戏场景 骑砍战团中进入城堡,乡村,战斗地图都被定义为场景,由module_scenes.py进行管理。 scene(游戏场景) 天空盒(Skyboxes.py) 地形(terrain code) 场景物(scene_…

Halcon闭运算closing

Halcon闭运算 文章目录 Halcon闭运算 闭运算的计算步骤&#xff0c;为先膨胀&#xff0c;后腐蚀。这两步操作能将看起来很接近的元素&#xff0c;如区域内部的空洞或外部孤立的点连接成一体&#xff0c;区域的外观和面积也不会有明显的改变。通俗地说&#xff0c;就是类似于“填…

Linux:/proc/sys/vm/目录各文件详解

目录 前言一、/proc/sys/vm/目录各文件二、相关功能的API函数 前言 /proc/sys/vm/ 目录是 Linux 系统中的一个特殊目录&#xff0c;它包含了与虚拟内存子系统相关的系统内核参数。这些参数可以用来配置系统的虚拟内存管理策略&#xff0c;包括内存分配、页面置换、内存压缩、NU…

Vue中使用JavaScript中的requestAnimationFrame动画循环实现循环滚动效果-demo

效果 requestAnimationFrame是一个由浏览器提供的 JavaScript 方法&#xff0c;用于在下一次浏览器重绘之前执行指定的回调函数。它接受一个回调函数作为参数&#xff0c;并返回一个整数值&#xff0c;可以用于取消动画循环。 使用 requestAnimationFrame 可以创建平滑的动画效…

【UnityShader入门精要学习笔记】(1)了解渲染流水线

本系列为作者学习UnityShader入门精要而作的笔记&#xff0c;内容将包括&#xff1a; 书本中句子照抄 个人批注项目源码一堆新手会犯的错误潜在的太监断更&#xff0c;有始无终 总之适用于同样开始学习Shader的同学们进行有取舍的参考。 文章目录 渲染流水线什么是流水线什么…