源代碼來自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)的矩形區域是圖像處理的結果。