C3204
2025-12-22 3f517728fd5f55bbd652613d4648cb02587c02d7
LB_VisionProcesses/Cameras/2DCameraForm.cs
@@ -1,5 +1,6 @@
using HalconDotNet;
using LB_VisionControl;
using LB_VisionProcesses.Cameras.HRCameras;
using MVSDK_Net;
using Newtonsoft.Json.Linq;
using OpenCvSharp;
@@ -37,9 +38,9 @@
        {
            InitializeComponent();
            //传入相机句柄后禁用连接/断开按键
            this.btnOpen.Enabled = false;
            this.btnClose.Enabled = false;
            this.cmbBrand.Enabled = false;
            this.btn_Open.Enabled = false;
            this.btn_Close.Enabled = false;
            this.cmb_Brand.Enabled = false;
            this.panel_Picture.Controls.Clear();
            this.dicCameras = dicCameras;
@@ -47,7 +48,7 @@
            this.camConfig = camConfig;
            foreach (var CamSN in dicCameras.Keys)
                cmbSN.Items.Add(CamSN);
                cmb_SN.Items.Add(CamSN);
            Enum.TryParse(camConfig.Params.Inputs["触发方式"].ToString(), out TriggerSource TriggerSource);
@@ -95,17 +96,17 @@
            var brands = Enum.GetValues(typeof(CameraBrand)).Cast<CameraBrand>();
            foreach (var brand in brands)
            {
                cmbBrand.Items.Add(brand.ToString());
                cmb_Brand.Items.Add(brand.ToString());
            }
            //选择Cam会触发ValueChanged事件,没有输入相机的情况下选择到-1
            if (camConfig != null)
            {
                string SN = camConfig.Params.Inputs["相机SN"].ToString();
                int Index = cmbSN.FindString(SN);
                int Index = cmb_SN.FindString(SN);
                cmbSN.Text = SN;
                cmbSN.SelectedIndex = Index;
                cmb_SN.Text = SN;
                cmb_SN.SelectedIndex = Index;
                ckbLocalTest.Checked = Convert.ToBoolean(camConfig.Params.Inputs["是否本地取图"].ToString());
                ckbUpParams.Checked = Convert.ToBoolean(camConfig.Params.Inputs["是否每次写入参数"].ToString());
@@ -146,15 +147,15 @@
            if (dicCameras != null && dicCameras.Count > 0)
                return;
            cmbSN.Items.Clear();
            cmb_SN.Items.Clear();
            // 尝试将输入字符串转换为枚举值
            if (Enum.TryParse(cmbBrand.Text, true, out CameraBrand brand))
            if (Enum.TryParse(cmb_Brand.Text, true, out CameraBrand brand))
            {
                // 使用 switch 语句来判断枚举值
                switch (brand)
                {
                    case CameraBrand.HRCamera:
                        //camera = new HRCamera();
                        camera = new HRCamera();
                        break;
                    case CameraBrand.LBCamera:
                        //camera = new LBCamera();
@@ -166,8 +167,8 @@
                foreach (var item in camera.GetListEnum())
                {
                    if (!cmbSN.Items.Contains(item))
                        cmbSN.Items.Add(item);
                    if (!cmb_SN.Items.Contains(item))
                        cmb_SN.Items.Add(item);
                }
            }
            else
@@ -178,7 +179,7 @@
        private void cmbSN_SelectedIndexChanged(object sender, EventArgs e)
        {
            btnEdit.Enabled = false;
            btn_Edit.Enabled = false;
            //camConfig不为空(输入有相机),更改相机选择需要重新加载刷图事件
            if (camConfig != null && camera != null)
            {
@@ -191,8 +192,8 @@
                camera.Dispose();
            }
            if (dicCameras != null && dicCameras.Count > 0 && dicCameras.ContainsKey(cmbSN.Text))
                camera = dicCameras[cmbSN.Text];
            if (dicCameras != null && dicCameras.Count > 0 && dicCameras.ContainsKey(cmb_SN.Text))
                camera = dicCameras[cmb_SN.Text];
            //说明相机已经初始化成功
            if (camera != null && camera.isGrabbing)
@@ -200,16 +201,16 @@
                camera.ImageGrabbed -= GetImageBllComplete;
                camera.ImageGrabbed += GetImageBllComplete;
                int Index = cmbBrand.FindString(camera.Brand.ToString()); ;
                cmbBrand.Text = camera.Brand.ToString();
                cmbBrand.SelectedIndex = Index;
                int Index = cmb_Brand.FindString(camera.Brand.ToString()); ;
                cmb_Brand.Text = camera.Brand.ToString();
                cmb_Brand.SelectedIndex = Index;
            }
        }
        private void btnOpen_Click(object sender, EventArgs e)
        private void btn_Open_Click(object sender, EventArgs e)
        {
            // 尝试将输入字符串转换为枚举值
            if (Enum.TryParse(cmbBrand.Text, true, out CameraBrand brand))
            if (Enum.TryParse(cmb_Brand.Text, true, out CameraBrand brand))
            {
                if (camera != null)
                {
@@ -224,14 +225,14 @@
                        //camera = new LBCamera();
                        break;
                    case CameraBrand.HRCamera:
                        //camera = new HRCamera();
                        camera = new HRCamera();
                        break;
                    default:
                        Debug.WriteLine($"【{DateTime.Now:HH:mm:ss.fff}】未知品牌");
                        return;
                }
                if (cmbSN.Items.Count > 0 && camera.InitDevice(cmbSN.Text.ToString(), this.Handle))
                if (cmb_SN.Items.Count > 0 && camera.InitDevice(cmb_SN.Text.ToString(), this.Handle))
                {
                    camera.ImageGrabbed -= GetImageBllComplete;
                    camera.ImageGrabbed += GetImageBllComplete;
@@ -265,11 +266,11 @@
            }
        }
        private void btnClose_Click(object sender, EventArgs e)
        private void btn_Close_Click(object sender, EventArgs e)
        {
            if (camera == null)
                return;
            this.btnEdit.Enabled = false;
            this.btn_Edit.Enabled = false;
            if (camera.CloseDevice())
            {
@@ -278,7 +279,7 @@
            }
        }
        private void btnEdit_Click(object sender, EventArgs e)
        private void btn_Edit_Click(object sender, EventArgs e)
        {
            if (camera == null)
                return;
@@ -323,7 +324,7 @@
        private Pen pen = new Pen(Color.Blue, 3f);
        private System.Drawing.Point[] stPointList = new System.Drawing.Point[4];
        private void btnGrabOnce_Click(object sender, EventArgs e)
        private void btn_GrabOnce_Click(object sender, EventArgs e)
        {
            DateTime StartTime = DateTime.Now;
            if (camera == null)
@@ -331,7 +332,7 @@
            Task.Factory.StartNew(() =>
            {
                //camera.GetCamConfig(out CameraConfig OriCamConfig);
                camera.GetCamConfig(out CameraConfig OriCamConfig);
                camera.SetExpouseTime(Convert.ToDouble(txtExp.Text));
                camera.SetGain(Convert.ToDouble(txtGain.Text));
@@ -347,11 +348,11 @@
                }));
                //复原原通讯口设置
                //camera.SetCamConfig(OriCamConfig);
                camera.SetCamConfig(OriCamConfig);
            });
        }
        private void btnStartHard_Click(object sender, EventArgs e)
        private void btn_StartHard_Click(object sender, EventArgs e)
        {
            if (camera == null)
                return;
@@ -359,7 +360,7 @@
            total.Clear();
            // 尝试将输入字符串转换为枚举值
            if (Enum.TryParse(cmbBrand.Text, true, out CameraBrand brand))
            if (Enum.TryParse(cmb_Brand.Text, true, out CameraBrand brand))
            {
                camera.StopGrabbing();
                camera.StartWith_HardTriggerModel();
@@ -367,11 +368,11 @@
            startGrabtime = DateTime.Now;
            cmbSN.Enabled = false;
            cmbBrand.Enabled = false;
            cmb_SN.Enabled = false;
            cmb_Brand.Enabled = false;
        }
        private void btnStartGrab_Click(object sender, EventArgs e)
        private void btn_StartGrab_Click(object sender, EventArgs e)
        {
            if (camera == null)
                return;
@@ -379,7 +380,7 @@
            total.Clear();
            // 尝试将输入字符串转换为枚举值
            if (Enum.TryParse(cmbBrand.Text, true, out CameraBrand brand))
            if (Enum.TryParse(cmb_Brand.Text, true, out CameraBrand brand))
            {
                Task.Factory.StartNew(() =>
                {
@@ -390,11 +391,11 @@
            }
            startGrabtime = DateTime.Now;
            cmbSN.Enabled = false;
            cmbBrand.Enabled = false;
            cmb_SN.Enabled = false;
            cmb_Brand.Enabled = false;
        }
        private void btnCloseGrab_Click(object sender, EventArgs e)
        private void btn_CloseGrab_Click(object sender, EventArgs e)
        {
            try
            {
@@ -402,7 +403,7 @@
                    return;
                // 尝试将输入字符串转换为枚举值
                if (Enum.TryParse(cmbBrand.Text, true, out CameraBrand brand))
                if (Enum.TryParse(cmb_Brand.Text, true, out CameraBrand brand))
                {
                    Task.Factory.StartNew(() =>
                    {
@@ -412,13 +413,13 @@
                    });
                }
                cmbSN.Enabled = true;
                cmbBrand.Enabled = true;
                cmb_SN.Enabled = true;
                cmb_Brand.Enabled = true;
            }
            catch { }
        }
        private void btnLocalGrab_Click(object sender, EventArgs e)
        private void btn_LocalGrab_Click(object sender, EventArgs e)
        {
            try
            {
@@ -451,7 +452,7 @@
            catch { }
        }
        private void txtExp_TextChanged(object sender, EventArgs e)
        private void txt_Exp_TextChanged(object sender, EventArgs e)
        {
            if (camera == null)
                return;
@@ -461,7 +462,7 @@
                camera.SetExpouseTime(exp);
        }
        private void txtGain_TextChanged(object sender, EventArgs e)
        private void txt_Gain_TextChanged(object sender, EventArgs e)
        {
            if (camera == null)
                return;
@@ -471,7 +472,7 @@
                camera.SetGain(gain);
        }
        private void btnAddImages_Click(object sender, EventArgs e)
        private void btn_AddImages_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFileDialog = new OpenFileDialog();
@@ -516,7 +517,7 @@
            if (res == DialogResult.Yes)  //保存VPP
            {
                camConfig.Params.Inputs.Add("相机SN", cmbSN.Text);
                camConfig.Params.Inputs.Add("相机SN", cmb_SN.Text);
                camConfig.Params.Inputs.Add("触发模式", TriggerMode.On);
                camConfig.Params.Inputs.Add("触发方式", radioButtonSoft.Checked ? TriggerSource.Software : TriggerSource.Line0);
                camConfig.Params.Inputs.Add("是否本地取图", ckbLocalTest.Checked);
@@ -573,7 +574,7 @@
            };
        }
        private void btnSaveImage_Click(object sender, EventArgs e)
        private void btn_SaveImage_Click(object sender, EventArgs e)
        {
            if (Bitmap == null)
            {
@@ -613,9 +614,9 @@
        private void radioButtonSoft_CheckedChanged(object sender, EventArgs e)
        {
            btnGrabOnce.Enabled = radioButtonSoft.Checked;
            btnStartGrab.Enabled = radioButtonSoft.Checked;
            btnCloseGrab.Enabled = radioButtonSoft.Checked;
            btn_GrabOnce.Enabled = radioButtonSoft.Checked;
            btn_StartGrab.Enabled = radioButtonSoft.Checked;
            btn_CloseGrab.Enabled = radioButtonSoft.Checked;
            btnStartHard.Enabled = !radioButtonSoft.Checked;
            if (camera == null)