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

文章目录

前言

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

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

xml 复制代码
<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>

按钮事件

csharp 复制代码
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

添加两个按钮

xml 复制代码
<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>

添加按钮事件

csharp 复制代码
 /// <summary>
 /// 画圆
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void Button_Click_1(object sender, RoutedEventArgs e)
 {
     //创建一个圆形,圆心为(100,100),半径为50
     var drawingObject = HDrawingObject.
         CreateDrawingObject(HDrawingObject.HDrawingObjectType.CIRCLE, new HTuple[] { 100, 100, 50 });
     //临时存放List
     drawingObjects.Add(drawingObject);

     //将圆画再hSmart画布上面
     hSmart.HalconWindow.AttachDrawingObjectToWindow(drawingObject);

 }

实现效果

这个圆是可以拖动的

创建矩形

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

csharp 复制代码
private void Button_Click_2(object sender, RoutedEventArgs e)
{
    //创建一个矩形
    var drawingObject = HDrawingObject.
        CreateDrawingObject(HDrawingObject.HDrawingObjectType.RECTANGLE1, new HTuple[] { 100, 100, 150,250 });
    //临时存放List
    drawingObjects.Add(drawingObject);

    //将矩形再hSmart画布上面
    hSmart.HalconWindow.AttachDrawingObjectToWindow(drawingObject);
}

简单调用导出脚本函数





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

相关推荐
辰海Coding4 小时前
MiniSpring框架学习笔记-解决循环依赖的简化IoC容器
笔记·学习
晓梦林5 小时前
cp520靶场学习笔记
android·笔记·学习
心中有国也有家6 小时前
cann-recipes-infer:昇腾 NPU 推理的“菜谱集合”
经验分享·笔记·学习·算法
玄米乌龙茶1236 小时前
LLM成长笔记(三):API 开发基础
笔记
Upsy-Daisy6 小时前
AI Agent 项目学习笔记(八):Tool Calling 工具调用机制总览
人工智能·笔记·学习
LateFrames7 小时前
520 - 如何说晚安 (WPF)
c#·wpf·浪漫·ui体验
LuminousCPP7 小时前
数据结构 - 线性表第四篇:C 语言通讯录优化升级全记录(踩坑 + 思考)
c语言·开发语言·数据结构·经验分享·笔记·学习
魔法阵维护师8 小时前
从零开发游戏需要学习的c#模块,第十四章(保存和加载)
学习·游戏·c#
_李小白8 小时前
【android opencv学习笔记】Day 17: 目标追踪(MeanShift)
android·opencv·学习
一只机电自动化菜鸟9 小时前
一建机电备考笔记(40) 建筑机电施工—排水管道施工(含考频+题型)
经验分享·笔记·学习·职场和发展·课程设计