当前位置: 首页 > news >正文

Halcon WPF 开发学习笔记(3):WPF+Halcon初步开发

文章目录

  • 前言
  • 在MainWindow.xaml里面导入Halcon命名空间
    • WPF简单调用Halcon
    • 创建矩形
      • 简单调用导出脚本函数
    • 正确显示匹配效果

前言

本章会简单讲解如何调用Halcon组件和接口,因为我们是进行混合开发模式。即核心脚本在平台调试,辅助脚本C#直接调用。

在MainWindow.xaml里面导入Halcon命名空间

在这里插入图片描述

<Window x:Class="Hello_Halcon.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:Hello_Halcon"xmlns:halcon="clr-namespace:HalconDotNet;assembly=halcondotnet"mc:Ignorable="d"Title="MainWindow" Height="450" Width="800"><Grid><Grid.RowDefinitions><RowDefinition Height="auto"/><RowDefinition /></Grid.RowDefinitions><!--添加Halcon图像导入事件--><Button Click="Button_Click" Content="加载图像"/><!--添加Halcon窗口--><halcon:HSmartWindowControlWPF Grid.Row="1" x:Name="hSmart"/></Grid>
</Window>

按钮事件

private void Button_Click(object sender, RoutedEventArgs e)
{//添加文件路径string fileName = "D:\\workspace\\program\\Halcon\\Images\\1.png\"";var image = new HImage(fileName);int width, height;image.GetImageSize(out width, out height);hSmart.HalconWindow.SetPart(0,0,width,height);hSmart.HalconWindow.DispObj(image);//自适应屏幕hSmart.SetFullImagePart();}

如果编译报错

在这里插入图片描述

安装System.Drawing.Common
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果出现上面问题记得看看有没有写hSmart.SetFullImagePart();

完美解决在我这篇文章中

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

WPF简单调用Halcon

添加两个按钮


<Window.Resources><Style TargetType="Button" x:Key="MarginButton"><Setter Property="Margin" Value="3" /></Style>
</Window.Resources>
<Grid><Grid.RowDefinitions><RowDefinition Height="auto" /><RowDefinition /></Grid.RowDefinitions><!--添加Halcon图像导入事件--><StackPanel Orientation="Horizontal"><Button Click="Button_Click" Content="加载图像"Style="{StaticResource MarginButton}" /><Button Click="Button_Click_1" Content="创建圆形"Style="{StaticResource MarginButton}" /><Button Click="Button_Click_2" Content="创建矩形"Style="{StaticResource MarginButton}" /></StackPanel><!--添加Halcon窗口--><halcon:HSmartWindowControlWPF Grid.Row="1" x:Name="hSmart" />
</Grid>

添加按钮事件

 /// <summary>/// 画圆/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void Button_Click_1(object sender, RoutedEventArgs e){//创建一个圆形,圆心为(100,100),半径为50var drawingObject = HDrawingObject.CreateDrawingObject(HDrawingObject.HDrawingObjectType.CIRCLE, new HTuple[] { 100, 100, 50 });//临时存放ListdrawingObjects.Add(drawingObject);//将圆画再hSmart画布上面hSmart.HalconWindow.AttachDrawingObjectToWindow(drawingObject);}

实现效果

在这里插入图片描述
这个圆是可以拖动的
在这里插入图片描述

创建矩形

和创建圆形一致,不再说明

private void Button_Click_2(object sender, RoutedEventArgs e)
{//创建一个矩形var drawingObject = HDrawingObject.CreateDrawingObject(HDrawingObject.HDrawingObjectType.RECTANGLE1, new HTuple[] { 100, 100, 150,250 });//临时存放ListdrawingObjects.Add(drawingObject);//将矩形再hSmart画布上面hSmart.HalconWindow.AttachDrawingObjectToWindow(drawingObject);
}

在这里插入图片描述

简单调用导出脚本函数

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

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

这个只是简单的导入脚本,不是二次开发。而且打开的窗体是无法关闭的。接下来我会讲解如何使用WPF进行二次开发。

正确显示匹配效果

因为我们直接.net 导出的脚本,是不能直接用的,用的时候会弹出一个窗体。我们希望能直接再原窗体上使用

在这里插入图片描述

在这里插入图片描述

private void Button_Click(object sender, RoutedEventArgs e)
{//添加文件路径string fileName = "Resources\\1.png";var image = new HImage(fileName);int width, height;image.GetImageSize(out width, out height);//绘制图片hSmart.HalconWindow.DispObj(image);//获取halcon脚本返回值TemplateService templateService = new TemplateService();var res = templateService.Action();//绘制十字锚点hSmart.HalconWindow.SetLineWidth(2);hSmart.HalconWindow.SetColor("red");hSmart.HalconWindow.DispCross(res.row,res.column,10,0);}

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

http://www.lryc.cn/news/229146.html

相关文章:

  • P6入门:项目初始化9-项目详情之资源 Resource
  • Python高级语法----使用Python进行模式匹配与元组解包
  • MySQL安装配置与使用教程(2023.11.13 MySQL8.0.35)
  • 【阿里云数据采集】采集标准Docker容器日志:部署阿里云Logtail容器以及创建Logtail配置,用于采集标准Docker容器日志
  • Django中如何创建表关系,请求生命周期流程图
  • MongoDB副本集配置和创建
  • 使用 `open-uri.with_proxy` 方法打开网页
  • 数据库表的设计——范式
  • Brute Force
  • HTML简单介绍
  • 【Java笔试强训】Day10(CM62 井字棋、HJ87 密码强度等级)
  • C语言求数组中出现次数最多的元素
  • 【Python Opencv】Opencv画图形
  • 了解防抖和节流:提升前端交互体验的实用策略
  • SQL学习之增删改查
  • Ansible角色定制实例
  • ElastaticSearch--- es多字段聚合
  • 本周Github有趣开源项目:Rspress等6个
  • 【华为OD题库-016】字符串摘要-Java
  • 生成式AI - Knowledge Graph Prompting:一种基于大模型的多文档问答方法
  • 深度学习AIR-PolSAR-Seg图像数据预处理
  • 求最大公约数math.gcd()
  • 数据结构之队列
  • MySQL数据库——存储过程-循环(while、repeat、loop)
  • Django路由
  • 头歌实践平台-数据结构-二叉树及其应用
  • 2023.11.11通过html内置“required-star“添加一个红色的星号来表示必填项
  • pcie【C#】
  • 西门子精智屏数据记录U盘插拔问题总结
  • (论文阅读27/100)Deep Filter Banks for Texture Recognition and Segmentation