Halcon:HDevelopTemplate (WPF)

源代码来自Halcon/HDevelopTemplate (WPF).

本实例介绍了在C#中直接加载HDevlop导出的代码,并运行。简单快捷,提供了一种设计模式。

1)新建一空的WPF窗体项目,.Net版本选择3.5;

2)添加Halcon3.5版本的引用halcondotnet;

3)在XAML中设置窗体属性:

Loaded="Window_Loaded"
Title="Window1" Height="591" Width="852" xmlns:my="clr-namespace:HalconDotNet;assembly=halcondotnet">

包括窗体的Loaded事件,大小,及Halcon的命名空间;

4)设置窗体的网格:

<Grid Height="Auto" Width="Auto">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="34*" />
            <ColumnDefinition Width="889*" />
        </Grid.ColumnDefinitions>
</Grid>

高宽为Auto,只有一行两个Column,column宽度的相对值为34:889;

5)添加三个控件:Halcon窗体,一个按钮,一个标签:

<my:HWindowControlWPF Margin="22,22,161,62" Name="hWindowControlWPF1" Grid.ColumnSpan="1" HorizontalAlignment="Left" VerticalAlignment="Top" Width="640" Height="480" />
<Button Grid.Column="2" Grid.Row="1" Height="45" HorizontalAlignment="Right" Margin="0,22,28,0" Name="buttonRun" VerticalAlignment="Top" Width="112" Click="buttonRun_Click">Run</Button>
<Label Height="28" Margin="22,0,168,12" Name="labelStatus" VerticalAlignment="Bottom" Grid.ColumnSpan="2"></Label>

上面只添加了按钮的Click事件buttonRun_Click事件;

6)给项目添加导出文件,默认类名为hDevelopExport,程序中只用到了两个方法:InitHalcon(初始化变量),RunHalcon(运行)。进入窗体的*.cs文件中,添加:

private HDevelopExport HDevExp;
...
HDevExp=new HDevlopExport();

7)添加窗体的Loaded事件:

private void Window_Loaded(object sender, RoutedEventArgs e)
{
      HDevExp.InitHalcon();
      labelStatus.Content = "Ready";
}

8)运行程序,我们看到:


WPF设计出来的界面的确很简洁。

9)添加按钮的Click事件:

private void RunExport()
{
      HTuple WindowID = hWindowControlWPF1.HalconID;
      HDevExp.RunHalcon(WindowID);

      this.Dispatcher.Invoke(new Action(() => {
        labelStatus.Content = "Finished.";
        buttonRun.IsEnabled = true;
      }));
}

private void buttonRun_Click(object sender, RoutedEventArgs e)
{
      buttonRun.IsEnabled = false;
      labelStatus.Content = "Running...";
      labelStatus.UpdateLayout();

      Thread exportThread = new Thread(new ThreadStart(this.RunExport));
      exportThread.Start();
}

按钮的Click事件中通过创建另外的线程来运行图像处理部分;线程主体是RunExport;在RunExport中代用图像处理部分的RunHalcon,然后等待线程结束并更新界面状态。

Dispatcher.Invoke(Action callback)在Windows中的解释为:在Dispatcher相关联的线程上同步执行Action操作(不知翻译是否正确?);Executes the specified Action synchronously on the thread the Dispatcher is associated with.

10)点击按钮,得到:


图像(100,100)-(200,200)的矩形区域是图像处理的结果。


猜你喜欢

转载自blog.csdn.net/huan_126/article/details/80248735
WPF
今日推荐