源代码来自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)的矩形区域是图像处理的结果。