C#使用Halcon连接相机

(注意:一个相机不能两个软件同时使用在使用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;
        }
    }
posted @ 2020-07-24 16:00  寻梦人i  阅读(5140)  评论(0编辑  收藏  举报