• Halcon WPF 开发学习笔记(3):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>
            
            
            <Button Click="Button_Click" Content="加载图像"/>
            
            <halcon:HSmartWindowControlWPF Grid.Row="1" x:Name="hSmart"/>
        Grid>
    Window>
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    按钮事件

    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();
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    如果编译报错

    在这里插入图片描述

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

    完美解决在我这篇文章中

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

    WPF简单调用Halcon

    添加两个按钮

    
    <Window.Resources>
        <Style TargetType="Button" x:Key="MarginButton">
            "Margin" Value="3" />
        Style>
    Window.Resources>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="auto" />
            <RowDefinition />
        Grid.RowDefinitions>
    
        
        <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:HSmartWindowControlWPF Grid.Row="1" x:Name="hSmart" />
    Grid>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    添加按钮事件

     /// 
     /// 画圆
     /// 
     /// 
     /// 
     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);
    
     }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    实现效果

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

    创建矩形

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

    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);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述

    简单调用导出脚本函数

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

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

    这个只是简单的导入脚本,不是二次开发。而且打开的窗体是无法关闭的。接下来我会讲解如何使用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);
    
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

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

  • 相关阅读:
    嵌入式怎么自学 大牛教你方法
    springboot写一个简单的接口样例
    【SpringBoot】请求与响应参数 IoC与DI 总结
    机械设计基础总复习
    Application Studio 学习笔记(1)
    切方块游戏 HTML5+jQuery【附源码】
    MD-MTSP:粒子群优化算法PSO求解多仓库多旅行商问题MATLAB(可更改数据集,旅行商的数量和起点)
    JavaScript-mooc(纯分享)
    用Python实现报表自动化详解
    RabbitMQ--基础--7.1--工作模式--简单模式
  • 原文地址:https://blog.csdn.net/qq_44695769/article/details/134361323