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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章