halcon源程序:
dev_open_window(0, 0, 512, 512, 'black', WindowHandle)
read_image (Image, 'C:/Users/BadGuy/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#-halcon./net 程序;(halcon11.0)

第二步:
新建C#窗體程序

第三步:
添加halcondotnet.DLL文件到引用中,並將halconwindow添加至工具箱;
步驟如下:
引用-添加引用-(找到halcon中的halcondotnet.DLL進行添加)


第四步:
在工具箱中添加halconWindow控件
打開工具箱,在空白處右鍵-選擇項-瀏覽,選擇下邊文件

第五步:
在Form1窗口添加一個button和halconWindow控件(工具箱中找halcon圖標).

第五步:
將導出的程序添加至現有程序的類中(其中就包含using halcondotnet;);
點擊項目-添加-現有項-把剛才導出來的類添加進來
第六步:
在Form1.cs中,實例化剛才導進來的類:HDevelopExport HD = new HDevelopExport();
第七步:
在button_click中調用此類的方法:HD.RunHalcon(hWindowControl1.HalconWindow);
C#程序:
namespace Test_cat
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
HDevelopExport HD = new HDevelopExport();
private void button1_Click(object sender, EventArgs e)
{
HD.RunHalcon(hWindowControl1.HalconWindow);
}
}
}
注意:如果在win64 系統下,則需要將平台更改為X64或者AnyCPU
halcon與C#混合編程進階版
這篇主要是C#和Halcon的混合編程,在此基礎上對按鍵不同功能的划分,以及圖片適應窗口和從本地打開圖片。
新手來這里:http://www.cnblogs.com/badguy518/p/5515054.html
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();
}
}
第二步:布局設計
本程序需要顯示圖片的halconWindow控件和讀圖以及處理圖片的兩個button控件;如下圖:

第三步:將導出的類進行框架分解
如果想在程序中添加不同的按鍵,比如一個用來打開圖片,一個用來處理圖片,則就需要將halcon導出的類進行分解;
框架如下:
//定義變量
//初始化halcon
public void InitHalcon()
{
//初始化halcon程序
}
//讀取圖片
public void ReadPicture(HTuple Window)
{
//讀圖程序
}
//處理圖片
public void Process()
{
//處理程序
}
第四步:填補框架
將對應框架下得程序進行填補操作(下邊程序可以代替public partial class HDevelopExport下的所有程序):
//定義變量
public HTuple hv_ExpDefaultWinHandle;
HObject ho_Image, ho_ImageGray;
HTuple hv_Width, hv_Height;
//初始化halcon
public void InitHalcon()
{
// Default settings used in HDevelop
HOperatorSet.SetSystem("do_low_error", "false");
}
public void ReadPicture(HTuple Window)
{
//讀圖並顯示
hv_ExpDefaultWinHandle = Window;
HOperatorSet.GenEmptyObj(out ho_Image);
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);
}
public void Process()
{
//處理程序
HOperatorSet.GenEmptyObj(out ho_ImageGray);
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();
}
第五步:在主程序Form1.cs中添加程序:
①在主程序Form1的類下對剛才添加的類進行實例化:
HDevelopExport hd = new HDevelopExport();
②在按鍵下添加相應程序
private void button1_Click(object sender, EventArgs e)
{
hd.ReadPicture(hWindowControl1.HalconWindow);
}
private void button2_Click(object sender, EventArgs e)
{
hd.Process();
}
此步驟完成之后,程序可以運行。
附加步驟1:
在以上程序中,已經可以將圖片顯示出來,並進行處理,但由於窗口與圖片的大小不一致,導致在顯示窗口中不能適應程序窗口的大小,下面是解決此類問題的方法:
在讀圖程序中,將獲取圖片的大小的程序HOperatorSet.GetImageSize(ho_Image, out hv_Width, out hv_Height);放在顯示圖片之前,並在顯示圖片程序之前加入下面程序:
HOperatorSet.SetPart(hv_ExpDefaultWinHandle, 0, 0, hv_Height - 1, hv_Width - 1);然后圖片就可以適應窗口大小。
此步驟也可以在halcon中更改。
附加步驟2:
如果想在程序中能夠打開本地文件夾的圖片進行處理,則需要改以下程序:
注意:①②是添加的類中③④是主程序中
①將public void ReadPicture(HTuple Window)的括號中加入參數,改為public void ReadPicture(HTuple Window, string ImagePath)
②將 ReadPicture下的程序 HOperatorSet.ReadImage(out ho_Image, "C:/Users/Administrator/Desktop/貓¨.jpg");改為HOperatorSet.ReadImage(out ho_Image, ImagePath);
③主程序中定義變量string ImagePath
④將button1的程序改成如下:
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog1 = new OpenFileDialog();
openFileDialog1.Filter ="JPEG文件|*.jpg*|BMP文件|*.bmp*";
openFileDialog1.RestoreDirectory = true;
openFileDialog1.FilterIndex = 1;
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
ImagePath = openFileDialog1.FileName;
hd.ReadPicture(hWindowControl1.HalconWindow, ImagePath);
}
}
接下來可以試試運行程序。