From ebcc1d53f14112363bbf539bcaf0202aadcdc9d7 Mon Sep 17 00:00:00 2001
From: C3032 <1057644574@qq.com>
Date: 星期一, 13 四月 2026 12:58:58 +0800
Subject: [PATCH] 2D取图计数功能完成

---
 LB_VisionProcesses/Cameras/CameraConfig.cs |   83 ++++++++++++++++++++++++++++++++++++-----
 1 files changed, 73 insertions(+), 10 deletions(-)

diff --git a/LB_VisionProcesses/Cameras/CameraConfig.cs b/LB_VisionProcesses/Cameras/CameraConfig.cs
index fa0bb79..3b619c9 100644
--- a/LB_VisionProcesses/Cameras/CameraConfig.cs
+++ b/LB_VisionProcesses/Cameras/CameraConfig.cs
@@ -1,6 +1,9 @@
-锘縰sing Newtonsoft.Json;
+锘縰sing HalconDotNet;
+using Newtonsoft.Json;
 using Newtonsoft.Json.Serialization;
 using OpenCvSharp;
+using OpenCvSharp.Extensions;
+using System;
 using System.Collections.Concurrent;
 using System.Diagnostics;
 using System.Text;
@@ -39,6 +42,11 @@
 
             Params.Inputs.Add("瓒呮椂鏃堕棿", 1000);
             Params.Inputs.Add("鏄惁澶辫触閲嶆柊鍙栧浘", false);
+
+            // 2D杞儙璁℃暟閰嶇疆锛堥粯璁や负1锛岃〃绀�3D妯″紡锛�2D鐩告満璁剧疆涓簄锛�
+            Params.Inputs.Add("ImagesPerTyre", 1);
+            Params.Inputs.Add("褰撳墠杞儙ID", 1);
+            Params.Inputs.Add("褰撳墠鍥惧儚搴忓彿", 0);
         }
 
         /// <summary>
@@ -190,7 +198,7 @@
 
                             Mat src = Cv2.ImRead(SN);
                             if (src != null && !src.Empty())
-                                OutputImage = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(src);
+                                OutputImage = src.ToBitmap();
                         }
                     }
                 }
@@ -206,12 +214,24 @@
                         return Result;
                     }
 
-                    if (Camera == null || Camera.SN != SN)
+                    // 濮嬬粓妫�鏌ョ紦瀛樼殑Camera瀵硅薄鏄惁涓庡叏灞�瀛楀吀涓殑涓�鑷�
+                    // 闃叉鐩告満琚垹闄ゅ苟閲嶅缓鍚�(SN鐩稿悓), 浠嶇劧寮曠敤鏃х殑宸查攢姣佸璞�
+                    if (dicCameras.ContainsKey(SN))
                     {
-                        if (dicCameras.ContainsKey(SN))
-                            Camera = dicCameras[SN];
-                        else
-                            Camera = null;
+                        var currentCam = dicCameras[SN];
+                        if (Camera != currentCam)
+                        {
+                            Camera = currentCam;
+                            // 濡傛灉鍒囨崲浜嗙浉鏈哄疄渚嬶紝涓旀湭寮�濮嬮噰闆嗭紝灏濊瘯寮�鍚噰闆�
+                            if (Camera != null && !Camera.isGrabbing)
+                            {
+                                try { Camera.StartGrabbing(); } catch { }
+                            }
+                        }
+                    }
+                    else
+                    {
+                        Camera = null;
                     }
 
                     if (Camera == null)
@@ -244,12 +264,17 @@
                     {
                         times--;
                         if (TriggerSource == TriggerSource.Software)
+                        {
                             Camera.GetImageWithSoftTrigger(out bitmap, timeout);
+                        }
                         else
+                        {
                             Camera.GetImage(out bitmap, timeout);
-
+                        }
                         if (bitmap != null)
+                        {
                             break;
+                        }
                         else if (isRegrab)
                         {
                             Debug.WriteLine($"鍙栧浘澶辫触,閲嶆柊鍙栧浘,鍓╀綑娆℃暟:{times}");
@@ -257,8 +282,9 @@
                     } while (times > 0 && isRegrab);
 
                     if (isUpParams)
+                    {
                         Camera.SetCamConfig(oriConfig);
-
+                    }
                     OutputImage = bitmap;
                 }
 
@@ -281,14 +307,49 @@
         {
             Result = true;
             Msg = "";
-            OutputImage = null;
+            if (OutputImage != null)
+            {
+                if (OutputImage is HObject)
+                    ((HObject)OutputImage).Dispose();
+                else if (OutputImage is Mat)
+                    ((Mat)OutputImage).Dispose();
+                else if (OutputImage is Bitmap)
+                    ((Bitmap)OutputImage).Dispose();
 
+                OutputImage = null;
+            }
             if (Record != null)
+            {
                 Record.Dispose();
+                Record = null;
+            }
         }
 
         public override void Dispose()
         {
+            if (InputImage != null)
+            {
+                if (InputImage is HObject)
+                    ((HObject)InputImage).Dispose();
+                else if (InputImage is Mat)
+                    ((Mat)InputImage).Dispose();
+                else if (InputImage is Bitmap)
+                    ((Bitmap)InputImage).Dispose();
+
+                InputImage = null;
+            }
+
+            if (OutputImage != null)
+            {
+                if (OutputImage is HObject)
+                    ((HObject)OutputImage).Dispose();
+                else if (OutputImage is Mat)
+                    ((Mat)OutputImage).Dispose();
+                else if (OutputImage is Bitmap)
+                    ((Bitmap)OutputImage).Dispose();
+
+                OutputImage = null;
+            }
             return;
         }
 
@@ -302,7 +363,9 @@
                 if (OutputImage != null)
                 {
                     if (OutputImage is Bitmap)
+                    {
                         obj.OutputImage = ((Bitmap)OutputImage).Clone();
+                    }
                 }
 
                 return obj;

--
Gitblit v1.9.3