From 993f7a5e7075b1e66d307e2b300b1f7054895e1f Mon Sep 17 00:00:00 2001
From: C3032 <C3032@BC3032>
Date: 星期六, 20 十二月 2025 15:36:20 +0800
Subject: [PATCH] 增强相机界面和图像处理逻辑

---
 LB_VisionProcesses/Cameras/HRCamera.cs              |   31 ++++++++++-----
 LB_SmartVision/Forms/Pages/CameraPage/CameraForm.cs |    2 
 LB_VisionProcesses/Cameras/2DCameraForm.cs          |   31 ++++++++++++---
 3 files changed, 46 insertions(+), 18 deletions(-)

diff --git a/LB_SmartVision/Forms/Pages/CameraPage/CameraForm.cs b/LB_SmartVision/Forms/Pages/CameraPage/CameraForm.cs
index 24c3194..bec33a9 100644
--- a/LB_SmartVision/Forms/Pages/CameraPage/CameraForm.cs
+++ b/LB_SmartVision/Forms/Pages/CameraPage/CameraForm.cs
@@ -43,7 +43,7 @@
             this.Text = camera.SN;
 
             //璁剧疆鍝佺墝
-
+            uiComboBoxBrand.Text = camera.Brand.ToString();
 
             onlinePictureBox = new UserPictureBox(uiGroupBoxImage);
             this.uiGroupBoxImage.Controls.Clear();
diff --git a/LB_VisionProcesses/Cameras/2DCameraForm.cs b/LB_VisionProcesses/Cameras/2DCameraForm.cs
index 252b28f..7081cd6 100644
--- a/LB_VisionProcesses/Cameras/2DCameraForm.cs
+++ b/LB_VisionProcesses/Cameras/2DCameraForm.cs
@@ -107,6 +107,12 @@
                 cmbSN.Text = SN;
                 cmbSN.SelectedIndex = Index;
 
+                // 濡傛灉娌℃壘鍒扮储寮曪紙鍙兘鏄柊澧炵殑锛夛紝鎵嬪姩瑙﹀彂涓�娆¢�昏緫浠ユ洿鏂癠I
+                if (Index == -1)
+                {
+                    cmbSN_SelectedIndexChanged(null, null);
+                }
+
                 ckbLocalTest.Checked = Convert.ToBoolean(camConfig.Params.Inputs["鏄惁鏈湴鍙栧浘"].ToString());
                 ckbUpParams.Checked = Convert.ToBoolean(camConfig.Params.Inputs["鏄惁姣忔鍐欏叆鍙傛暟"].ToString());
                 ckbRegrab.Checked = Convert.ToBoolean(camConfig.Params.Inputs["鏄惁澶辫触閲嶆柊鍙栧浘"].ToString());
@@ -195,15 +201,26 @@
                 camera = dicCameras[cmbSN.Text];
 
             //璇存槑鐩告満宸茬粡鍒濆鍖栨垚鍔�
-            if (camera != null && camera.isGrabbing)
+            if (camera != null)
             {
-                camera.ImageGrabbed -= GetImageBllComplete;
-                camera.ImageGrabbed += GetImageBllComplete;
+                int Index = cmbBrand.FindString(camera.Brand.ToString());
+                if (Index >= 0)
+                {
+                    cmbBrand.Text = camera.Brand.ToString();
+                    cmbBrand.SelectedIndex = Index;
+                }
 
-                int Index = cmbBrand.FindString(camera.Brand.ToString()); ;
-                cmbBrand.Text = camera.Brand.ToString();
-                cmbBrand.SelectedIndex = Index;
-                this.btnEdit.Enabled = true;
+                if (camera.isGrabbing)
+                {
+                    camera.ImageGrabbed -= GetImageBllComplete;
+                    camera.ImageGrabbed += GetImageBllComplete;
+                    this.btnEdit.Enabled = true;
+                }
+                // 濡傛灉鐩告満瀛樺湪浜庡瓧鍏镐腑锛岃鏄庢槸宸茶繛鎺ョ殑璁惧锛屽厑璁哥紪杈�
+                else if (dicCameras != null && dicCameras.ContainsKey(camera.SN))
+                {
+                    this.btnEdit.Enabled = true;
+                }
             }
         }
 
diff --git a/LB_VisionProcesses/Cameras/HRCamera.cs b/LB_VisionProcesses/Cameras/HRCamera.cs
index 8c12123..f707aca 100644
--- a/LB_VisionProcesses/Cameras/HRCamera.cs
+++ b/LB_VisionProcesses/Cameras/HRCamera.cs
@@ -858,29 +858,38 @@
         /// </summary>
         private void GrabThreadProc()
         {
-            IMVDefine.IMV_Frame frame = new IMVDefine.IMV_Frame();
-
             while (_threadRunning)
             {
+                IMVDefine.IMV_Frame frame = new IMVDefine.IMV_Frame();
                 try
                 {
                     // 鑾峰彇鍥惧儚甯�
-                    int result = _camera.IMV_GetFrame(ref frame, 100);
+                    int result = _camera.IMV_GetFrame(ref frame, 1000);
 
                     if (result == IMVDefine.IMV_OK)
                     {
                         // 澶勭悊鍥惧儚甯�
                         ProcessFrame(frame);
                     }
-                    else if (result != 0x80000001) // 瓒呮椂閿欒浠g爜
+                    else
                     {
-                        // 闈炶秴鏃堕敊璇�
-                        System.Diagnostics.Debug.WriteLine($"鑾峰彇鍥惧儚甯уけ璐ワ紝閿欒鐮侊細{result}");
+                        // 鍗充娇鑾峰彇澶辫触锛屼篃灏濊瘯閲婃斁甯э紝闃叉SDK鍐呴儴缂撳瓨娉勯湶
+                        // 娉ㄦ剰锛歠rame鏄瘡娆℃柊寤虹殑锛屽鏋淕etFrame娌″~鍏咃紝杩欓噷閲婃斁搴旇鏄畨鍏ㄧ殑锛堣SDK瀹炵幇鑰屽畾锛�
+                        var tempFrame = frame;
+                        _camera.IMV_ReleaseFrame(ref tempFrame);
+
+                        if ((uint)result != 0x80000001 && result != -119 && result != -102) // 瓒呮椂閿欒浠g爜
+                        {
+                            // 闈炶秴鏃堕敊璇�
+                            System.Diagnostics.Debug.WriteLine($"鑾峰彇鍥惧儚甯уけ璐ワ紝閿欒鐮侊細{result}");
+                            Thread.Sleep(10); // 鍑洪敊鏃剁◢浣滅瓑寰�
+                        }
                     }
                 }
                 catch (Exception ex)
                 {
                     System.Diagnostics.Debug.WriteLine($"閲囬泦绾跨▼寮傚父锛歿ex.Message}");
+                    Thread.Sleep(10);
                 }
 
                 Thread.Sleep(1);
@@ -907,15 +916,17 @@
                     // 鏇存柊鍥炶皟鍥惧儚
                     CallBackImg = bitmap;
                 }
-
-                // 閲婃斁甯�
-                var tempFrame = frame;
-                _camera.IMV_ReleaseFrame(ref tempFrame);
             }
             catch (Exception ex)
             {
                 System.Diagnostics.Debug.WriteLine($"澶勭悊鍥惧儚甯уけ璐ワ細{ex.Message}");
             }
+            finally
+            {
+                // 纭繚鏃犺濡備綍閮介噴鏀惧抚锛岄槻姝㈢紦瀛樺崰婊�
+                var tempFrame = frame;
+                _camera.IMV_ReleaseFrame(ref tempFrame);
+            }
         }
 
         /// <summary>

--
Gitblit v1.9.3