halcon源程序:
dev_open_window(0, 0, 512, 512, 'black', WindowHandle)
read_image (Image, 'C:/Users/Administrator/Desktop/貓.jpg')
dev_display(Image)
get_image_size(Image, Width, Height)
rgb3_to_gray(Image, Image, Image, ImageGray)
dev_display(ImageGray)
注意:寫halcon程序時,如果過程中的圖片需要顯示出來,則需要在每個過程中都添加dev_display(**)
第一步:導出C#程序,建立項目,並添加此類
//
// File generated by HDevelop for HALCON/DOTNET (C#) Version 10.0
//
// This file is intended to be used with the HDevelopTemplate or
// HDevelopTemplateWPF projects located under %HALCONEXAMPLES%\c#
using System;
using HalconDotNet;
public partial class HDevelopExport
{
public HTuple hv_ExpDefaultWinHandle;
// Main procedure
private void action()
{
// Local iconic variables
HObject ho_Image, ho_ImageGray;
// Local control variables
HTuple hv_Width, hv_Height;
// Initialize local and output iconic variables
HOperatorSet.GenEmptyObj(out ho_Image);
HOperatorSet.GenEmptyObj(out ho_ImageGray);
//dev_open_window(...);
ho_Image.Dispose();
HOperatorSet.ReadImage(out ho_Image, "C:/Users/Administrator/Desktop/貓¨.jpg");
HOperatorSet.DispObj(ho_Image, hv_ExpDefaultWinHandle);
HOperatorSet.GetImageSize(ho_Image, out hv_Width, out hv_Height);
ho_ImageGray.Dispose();
HOperatorSet.Rgb3ToGray(ho_Image, ho_Image, ho_Image, out ho_ImageGray);
HOperatorSet.DispObj(ho_ImageGray, hv_ExpDefaultWinHandle);
ho_Image.Dispose();
ho_ImageGray.Dispose();
}
public void InitHalcon()
{
// Default settings used in HDevelop
HOperatorSet.SetSystem("do_low_error", "false");
}
public void RunHalcon(HTuple Window)
{
hv_ExpDefaultWinHandle = Window;
action();
}
}
2.建立c#工程
在VS中新建一個c#工程,記住框架要選 .NET Framework 4,不要手賤看到還有高版本的4.5就跑去選4.5
在“設計”中完成以下設計:
如何添加按鈕,在這里就不多說了。
上面的那個控件是HWindowsControl。

3.工具箱中添加Halcon窗口工具(首次使用需要)
如果是首次使用Halcon和c#混合編程,則需要向VS的工具箱中添加Halcon窗口工具HWindowControl。添加的方法是在“視圖”->“工具箱”-> “所有Windows窗體”中右擊,選擇“選擇項”
在彈出窗口中選擇“瀏覽”
在MVTech安裝目錄下查找:halcon12.0\bin\dotnet20或dotnet35文件夾,我這里是選的dotnet35文件夾,應該是和VS的版本相匹配。
找到文件夾下halcondotnet.dll添加即可。

4.程序改寫
接下來就是非常重要的程序改寫階段啦。
首先在程序頭添加
using HalconDotNet;
接下來是一個坑,向namespace中添加導出的Halcon c#代碼時一定得注意:必須把導出的代碼放在控件的代碼段后面。否則就會彈個錯!!!
喏就是它了,public partial class HDevelopExport:

最后一步就是改寫按鈕控件的事件響應:
private void Open_Click(object sender, EventArgs e) { HDevelopExport HD = new HDevelopExport(); HD.RunHalcon(hWindowControl1.HalconWindow); }
最后要注意,項目編譯的時候,屬性選X64 CPU


寫在后面的話 ,這里很重要,此乃精要所在
編譯程序時,目標平台使用AnyCPU 程序會自動崩潰無提示。單步跟蹤會在這里出錯:
this.hWindowControl1 = new HalconDotNet.HWindowControl();

原因是調用 halcondotnet.dll與 halcon.dll兩Dll出現的錯誤,因為我沒有裝Halcon,只用到這兩個Dll, 我用的Dll是64位的,所以編譯的時候,目標平台使用X64 即可,
