WPF+Halcon 培训项目实战(8-9):WPF+Halcon初次开发

news2024/11/24 20:04:04

文章目录

  • 前言
  • 相关链接
  • 项目专栏
  • 运行环境
  • 匹配图片
  • WPF Halcon组件
    • HSmartWindowControlWPF绑定
    • 读取图片
      • 运行代码
      • 运行结果
    • 抖动问题解决
      • 运行结果
    • 绘制矩形
      • 绘制图像会消失
    • 绘制对象绑定事件
    • 拖动事件

前言

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

相关链接

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

Halcon开发 CSDN博客专栏

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

项目专栏

WPF+Halcon实战项目

运行环境

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

匹配图片

在这里插入图片描述

WPF Halcon组件

WPF的 Halcon组件我之前使用过,有兴趣的可以去看我的专栏里面找Halcon WPF 开发学习笔记

Halcon开发 CSDN博客专栏

HSmartWindowControlWPF绑定

我们这里基于ViewModel的形式开发。所以我们需要将HSmartWindowControlWPF(后面简称HS组件) 绑定到我们的DataContext中。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

读取图片

我们在Resources文件夹中添加一张图片
在这里插入图片描述
确保自己已经完成了Resources文件夹的设置,不清楚的可以看上一章的WPF项目初始化

WPF+Halcon 培训项目实战(7):目标匹配助手

在这里插入图片描述

运行代码

            ReadImgBtn = new RelayCommand(() =>
            {
                try
                {
                    MsgHelper.Info("读取图片");
                    var Image = new HImage();
                    Image.ReadImage("Resources/1.png");
                    HalconWindow.HalconWindow.DispObj(Image);
                }
                catch(Exception ex) {

                    MsgHelper.Error("HS组件加载图片失败!:" +ex.Message);
                }
                
            });

运行结果

在这里插入图片描述

抖动问题解决

Halcon WPF 开发学习笔记:HSmartWindowControlWPF正常加载

代码修改为

            ReadImgBtn = new RelayCommand(() =>
            {
                try
                {
                    MsgHelper.Info("读取图片");
                    var Image = new HImage();
                    Image.ReadImage("Resources/1.png");

                    HalconWindow.HalconWindow.DispObj(Image);
                    //读取后将图片居中
                    HalconWindow.SetFullImagePart();
                    //读取后将图片完全拉伸充满整个屏幕
                    //HalconWindow.SetFullImagePart(Image);

                }
                catch (Exception ex) {

                    MsgHelper.Error("HS组件加载图片失败!:" +ex.Message);
                }
                
            });

运行结果

在这里插入图片描述

绘制矩形

这个图片读取成功之后,说明我们的Halcon组件已经加载成功了。现在我们代码添加以下别的功能。

InitRectangleBtn = new RelayCommand(() =>
{
    MsgHelper.Info("生成矩形");
    var drawObj = HDrawingObject.CreateDrawingObject(HDrawingObject.HDrawingObjectType.RECTANGLE1, 100,200,300,400);
    HalconWindow.HalconWindow.AttachDrawingObjectToWindow(drawObj);
});

绘制图像会消失

在这里插入图片描述
因为我们没有声明一个公有变量,所以每次运行完代码他就默认把矩形窗口释放掉了。所以我们需要重新生成矩形窗口。

InitRectangleBtn = new RelayCommand(() =>
{
    MsgHelper.Info("生成矩形");
    rect = HDrawingObject.CreateDrawingObject(HDrawingObject.HDrawingObjectType.RECTANGLE1, 100,200,300,400);
    HalconWindow.HalconWindow.AttachDrawingObjectToWindow(rect);
});

在这里插入图片描述

绘制对象绑定事件

在这里插入图片描述
一共有5种事件:

  • OnAttach:附加
  • OnDetach:分离
  • OnDrag:拖动
  • OnResize:缩放
  • OnSelect:选中

我们添加以下打印函数看看结果:

 InitRectangleBtn = new RelayCommand(() =>
 {
     MsgHelper.Info("生成矩形");
     rect = HDrawingObject.CreateDrawingObject(HDrawingObject.HDrawingObjectType.RECTANGLE1, 100,200,300,400);
     HalconWindow.HalconWindow.AttachDrawingObjectToWindow(rect);
     rect.OnAttach(new HDrawingObject.HDrawingObjectCallback((id, window, type) =>
     {
         NLogHelper.Debug("附加事件");
     }));
     rect.OnDrag(new HDrawingObject.HDrawingObjectCallback((id, window, type) =>
     {
         NLogHelper.Debug("拖动事件");
     }));
     rect.OnResize(new HDrawingObject.HDrawingObjectCallback((id, window, type) =>
     {
         NLogHelper.Debug("缩放事件");
     }));
     rect.OnSelect(new HDrawingObject.HDrawingObjectCallback((id, window, type) =>
     {
         NLogHelper.Debug("选中事件");
     }));
     rect.OnDetach(new HDrawingObject.HDrawingObjectCallback((id, window, type) =>
     {
         NLogHelper.Debug("分离事件");
     }));

 });

在这里插入图片描述
根据我的测试,主要是拖动和缩放事件。选中很难触发。附加和分离应该是有个触发的方式,现在不了解。

拖动事件

InitRectangleBtn = new RelayCommand(() =>
{
    MsgHelper.Info("生成矩形");
    rect = HDrawingObject.CreateDrawingObject(HDrawingObject.HDrawingObjectType.RECTANGLE1, 100,200,300,400);
    HalconWindow.HalconWindow.AttachDrawingObjectToWindow(rect);
    rect.OnDrag(new HDrawingObject.HDrawingObjectCallbackClass((id, window, type) =>
    {
        var hv_type = id.GetDrawingObjectParams("type");
        var row1 = id.GetDrawingObjectParams("row1");
        var row2 = id.GetDrawingObjectParams("row2");
        var column1 = id.GetDrawingObjectParams("column1");
        var column2 = id.GetDrawingObjectParams("column2");
        //打印坐标
        NLogHelper.Debug($"拖动事件: {hv_type}:{row1} {column1} {row2} {column2} ");
        
    }));
});

在这里插入图片描述

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

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

相关文章

数据结构——顺序栈与链式栈的实现

目录 一、概念 1、栈的定义 2、栈顶 3、栈底 二、接口 1、可写接口 1)数据入栈 2)数据出栈 3)清空栈 2、只读接口 1)获取栈顶数据 2)获取栈元素个数 3)栈的判空 三、栈的基本运算 四、顺序栈&…

【CISSP学习笔记】5. 安全架构和工程

该知识领域涉及如下考点,具体内容分布于如下各个子章节: 使用安全设计原理来研究、实施与管理工程过程理解安全模型的基本概念(例如 Biba、Star Model、Bell-LaPadula 等模型)基于系统安全要求选择控制措施理解信息系统 (IS) 的安…

智能对话意图分析服务接口

机器人聊天,智能助手,内容生成,智能办公,智能辅助,智能搜索 一、接口介绍 通过接收用户提出的问题、输入的图片和文档等需求,准确识别其对话意图,并触发相应的回复。同时,整合了AP…

ansible管理windows测试

一、环境介绍 Ansible管理主机: 系统: redhat7.6 Linux管理服务器需安装pywinrm插件 Windows客户端主机: 系统: Server2012R2 Windows机器需要安装或升级powershell4.0以上版本,Server2008R2默认的版本是2.0,因此必须升…

m1芯片电脑上的paragon15如何安装激活 m1芯片电脑上ntfs for mac如何安装

Paragon NTFS软件在M1芯片电脑上安装之后,最后一步会让我们“允许加载第三方内核扩展”,具体如下图所示。 图1:允许加载第三方内核扩展 按照图中提示“单击此处“,然后打开安全与隐私。接下来依次点击小锁标志进行解锁&#xff0c…

【零基础入门TypeScript】TypeScript - 概述

目录 什么是 TypeScript? TypeScript 的特点 TypeScript 和 ECMAScript 为什么使用 TypeScript? TypeScript 的组件 声明文件 JavaScript 是作为客户端语言引入的。Node.js 的发展也标志着 JavaScript 成为一种新兴的服务器端技术。然而&#xff0…

云原生十二问

一、什么是云原生? 云原生是在云计算环境中构建、部署和管理现代应用程序的软件方法。现代企业希望构建高度可扩展、灵活且具有弹性的应用程序,可以快速更新以满足客户需求。为此,他们使用现代工具和技术,这些工具和技术本质上支…

python 深度学习 记录遇到的报错问题11

本篇继python 深度学习 记录遇到的报错问题10-CSDN博客 六、ValueError: cannot convert float NaN to integer 报错: 原因:这个错误通常是因为在尝试将NaN值转换为整数时发生的。NaN表示“非数字”,它无法转换为整数。在 Python 中&#xf…

2023年度回顾:怿星科技的转型与创新

岁月不居,时节如流。随着2023年的落幕,怿星科技在这一年中不仅实现了自身的转型,还在技术创新、产品研发、行业合作和人才培养等方面取得了显著的成就。这一年,怿星科技正式完成了从服务型公司向产品型公司的战略转变,…

媒体捕捉-拍照

引言 在项目开发中,从媒体库中选择图片或使用相机拍摄图片是一个极为普遍的需求。通常,我们使用UIImagePickerController来实现单张图片选择或启动相机拍照。整个拍照过程由UIImagePickerController内部实现,无需我们关心细节,只…

让你的隧道代理HTTP使用更加顺畅高效

在数字世界的探险中,隧道代理HTTP是我们穿越网络限制的重要工具。但有时候,我们可能会遇到连接不稳定、速度慢等问题。如何让隧道代理HTTP使用更加顺畅高效?下面是一些建议和技巧。 一、选择合适的代理服务器 代理服务器的地理位置、性能和…

C#/.NET/.NET Core推荐学习书籍(23年12月更新)

前言 古人云:“书中自有黄金屋,书中自有颜如玉”,说明了书籍的重要性。作为程序员,我们需要不断学习以提升自己的核心竞争力。以下是一些优秀的C#/.NET/.NET Core相关学习书籍,值得.NET开发者们学习和专研。书籍已分类…

查看证书有效期的命令

后面的证书是我们当时创建证书的路径 cfssl-certinfo -cert /opt/etcd/certs/etcd.pem

服务雪崩简单的介绍

定义 服务雪崩效应是一种因“服务提供者的不可用”(原因)导致“服务调用者不可用”(结果),并将不可用逐渐放大的现象。如下图所示: 上图中, A为服务提供者, B为A的服务调用者, C和D是B的服务调用者. 当A的…

精确率(Precision,P),召回率(Recall,R)以及F1值(F1-score,F1)

狗狗识别系统的例子: 假设我们有两个集合: 实际狗狗的集合(实际真正是狗狗的图片):A我们识别为狗狗的集合(我们认为是狗狗的图片):B 精确率(Precision,P&am…

LeetCode刷题--- 第 N 个泰波那契数

个人主页:元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏 力扣递归算法题 http://t.csdnimg.cn/yUl2I 【C】 ​​​​​​http://t.csdnimg.cn/6AbpV 数据结构与算法 ​​​http://t.csdnimg.cn/hKh2l 前言:这个专栏主要讲述动…

【十三】【动态规划】1745. 分割回文串 IV、132. 分割回文串 II、516. 最长回文子序列,三道题目深度解析

动态规划 动态规划就像是解决问题的一种策略,它可以帮助我们更高效地找到问题的解决方案。这个策略的核心思想就是将问题分解为一系列的小问题,并将每个小问题的解保存起来。这样,当我们需要解决原始问题的时候,我们就可以直接利…

半年没发过文章,这个博主竟然...

目 录 前言这半年去干了什么?考研求职山东电建移动 论文大创课余 未来公务员继续考研就业 结语 前言 第一次写这样的记录性的文章,这篇文章可能不会有太过于华丽的辞藻,但是它将展现我个人的真实经历和内心感受。在过去的时间里,我…

WEB 3D技术 three.js通过光线投射 完成几何体与外界的事件交互

本文 我们来说 光线投射 光线投射技术是用于3维空间场景中的交互事件 我们先编写代码如下 import ./style.css import * as THREE from "three"; import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js";const scene new THRE…

Redis Cluster集群模式学习

Redis Cluster集群模式 Redis哨兵模式:https://blog.csdn.net/liwenyang1992/article/details/133956200 Redis Cluster集群模式示意图: Cluster模式是Redis3.0开始推出采用无中心结构,每个节点保存数据和整个集群状态,每个节点都…