(注意:一個相機不能兩個軟件同時使用在使用vs的時候把halcon關掉,用halcon的時候把vs的關掉切記*一個大坑* 在vs中調用的代碼的時候要是用多線程才能顯示出來圖像不然則錄像顯示不出來)
1.使用Halcon打開助手打開一個新的Image Acquisition
2.自動檢測接口,看是否是你連接的相機接口
3.連接(連接成功之后),點擊實時看一下左邊是否有相機在錄像 最好檢測一下
4.插入代碼,然后生成C#代碼 導出之后用vs打開
5.開始VS的操作
把 action方法里面的東西粘貼到你要用的地方 然后開始進行修改
列入:
public partial class Form1 : Form { public Form1() { InitializeComponent(); } // Local iconic variables HObject ho_Image = null; // 圖像獲取設備的句柄 HTuple hv_AcqHandle = null; //線程 Thread thread = null; //設置全局參數 int capTure = 0; int width, height; //開始采集 private void button1_Click(object sender, EventArgs e) { // 初始化本地和輸出圖標變量 HOperatorSet.GenEmptyObj(out ho_Image); //圖像采集 HOperatorSet.OpenFramegrabber("GigEVision2", 0, 0, 0, 0, 0, 0, "progressive", -1, "default", -1, "false", "default", "003053308f81_Basler_acA244020gm", 0, -1, out hv_AcqHandle); //啟動異步抓取句柄和一個過期的默認值-1或者0 HOperatorSet.GrabImageStart(hv_AcqHandle, -1); //線程 thread = new Thread(GetImage); thread.IsBackground = true; thread.Start(); // HOperatorSet.GrabImageAsync(out ho_Image, hv_AcqHandle, -1); //獲取圖像的大小 寬,高 // HOperatorSet.GetImageSize(ho_Image, out width, out height); //參數1獲取窗口的句柄,2 左上角的行默認0,3 左上角的列默認2,4 右下角的行默認-1,5 右下角的列默認-1 // HOperatorSet.SetPart(hWindowControl1.HalconWindow,0,0,width-1,height-1); #region 照片小測試 //HObject ho_Image; //// Initialize local and output iconic variables //HOperatorSet.GenEmptyObj(out ho_Image); //ho_Image.Dispose(); //HOperatorSet.ReadImage(out ho_Image, @"C:\Users\lenovo\Desktop\temp\b.jpg"); //HOperatorSet.GetImageSize(ho_Image, out HTuple width, out HTuple height); //hWindowControl1.HalconWindow.DispObj(ho_Image); //ho_Image.Dispose(); #endregion } private void GetImage() { while (true) { //異步圖像抓取(out 圖像,句柄,默認值-1) HOperatorSet.GrabImageAsync(out ho_Image, hv_AcqHandle, -1); HOperatorSet.DispObj(ho_Image, hWindowControl1.HalconWindow); if (capTure == 1) { //寫入圖片,把圖片存放在指定的位置 圖片、格式、值默認0、存放的地址 HOperatorSet.WriteImage(ho_Image, "jpg", 0, @"D:\C#存放的圖片地方"); MessageBox.Show("保存成功,請注意查看"); this.button4(); } } } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { //if (MessageBox.Show("真的要退出程序嗎?", "退出程序", MessageBoxButtons.OKCancel) == DialogResult.Cancel) //{ // e.Cancel = true; //} //else //{ // Application.Exit(); //} } //停止線程 private void button2_Click(object sender, EventArgs e) { thread.Abort(); //要關閉的圖像采集設備的句柄。 HOperatorSet.CloseFramegrabber(hv_AcqHandle); } private void button4() { capTure = 0; } private void button3_Click(object sender, EventArgs e) { capTure = 1; } }