From 577926fdf6836eb7506d2dff189a9d18b0aeb932 Mon Sep 17 00:00:00 2001
From: C3204 <zhengyabo@lanpucloud.cn>
Date: 星期四, 15 一月 2026 09:56:00 +0800
Subject: [PATCH] 修复图像采集工具使用CollectedImages
---
LB_VisionProcesses/Cameras/LBCameras/LBCamera.cs | 149 ++++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 127 insertions(+), 22 deletions(-)
diff --git a/LB_VisionProcesses/Cameras/LBCameras/LBCamera.cs b/LB_VisionProcesses/Cameras/LBCameras/LBCamera.cs
index c03ddab..810ffd3 100644
--- a/LB_VisionProcesses/Cameras/LBCameras/LBCamera.cs
+++ b/LB_VisionProcesses/Cameras/LBCameras/LBCamera.cs
@@ -51,6 +51,8 @@
// 涓存椂琛岀紦鍐诧紝鐢ㄤ簬鎺ユ敹鍥炶皟鏁版嵁
private byte[] _tempLineBuffer = null;
private bool _isContinuous = false;
+ // 鏂板锛欳ollectedImages鎿嶄綔閿侊紝淇濊瘉绾跨▼瀹夊叏
+ private readonly object _collectedImagesLock = new object();
public LBCamera()
{
@@ -568,37 +570,140 @@
_frameCount++;
AsyncLogHelper.Info($"LBCamera[{SN}]: Frame {_frameCount} generated ({width}x{height})");
-
- // 寮傛瑙﹀彂浜嬩欢锛岄伩鍏嶉樆濉濻DK鍥炶皟绾跨▼
- Task.Factory.StartNew(() =>
+ //绌哄�兼牎楠岋細杞崲澶辫触鍒欑洿鎺ヨ繑鍥�
+ if (bmp == null)
{
- try
+ AsyncLogHelper.Warn(SN + "甯ц浆鎹负Bitmap澶辫触锛岃烦杩囧鐞�");
+ return;
+ }
+ // 绾跨▼瀹夊叏鍦板皢Bitmap娣诲姞鍒癈ollectedImages瀛楀吀
+ lock (_collectedImagesLock)
+ {
+ // 纭繚褰撳墠鐩告満SN瀵瑰簲鐨勫垪琛ㄥ瓨鍦�
+ if (!CollectedImages.ContainsKey(SN))
{
- ImageGrabbed?.Invoke(this, new LBCameraEventArgs(SN, bmp, true));
- CallBackImg = (Bitmap)bmp.Clone();
- if (CallBackImg == null)
- {
- return;
- }
- if (GetTriggerMode(out TriggerMode mode, out TriggerSource source))
- {
- if (mode == TriggerMode.On && source != TriggerSource.Software)
- TriggerRunMessageReceived?.Invoke(SN, source.ToString()); // 瑙﹀彂杩愯浜嬩欢
- }
- bmp.Dispose();
+ CollectedImages[SN] = new List<Bitmap>();
}
- catch (Exception ex)
- {
- AsyncLogHelper.Error($"LBCamera: Event Invoke error - {ex.Message}");
- bmp.Dispose(); // 寮傚父鏃堕噴鏀捐祫婧�
- }
- });
+ CollectedImages[SN].Add(bmp);
+ AsyncLogHelper.Info(SN + $"鍥惧儚宸插姞鍏ョ紦瀛橈紝褰撳墠缂撳瓨鏁伴噺锛歿CollectedImages[SN].Count}");
+ }
+
+ // 澶勭悊CollectedImages涓殑鍥惧儚锛氶亶鍘嗘秷璐瑰垪琛ㄧ涓�涓厓绱犵洿鍒颁负绌�
+ ProcessCollectedImages();
+ //// 寮傛瑙﹀彂浜嬩欢锛岄伩鍏嶉樆濉濻DK鍥炶皟绾跨▼
+ //Task.Factory.StartNew(() =>
+ //{
+ // try
+ // {
+ // ImageGrabbed?.Invoke(this, new LBCameraEventArgs(SN, bmp, true));
+ // CallBackImg = (Bitmap)bmp.Clone();
+ // if (CallBackImg == null)
+ // {
+ // return;
+ // }
+ // if (GetTriggerMode(out TriggerMode mode, out TriggerSource source))
+ // {
+ // if (mode == TriggerMode.On && source != TriggerSource.Software)
+ // TriggerRunMessageReceived?.Invoke(SN, source.ToString()); // 瑙﹀彂杩愯浜嬩欢
+ // }
+ // bmp.Dispose();
+ // }
+ // catch (Exception ex)
+ // {
+ // AsyncLogHelper.Error($"LBCamera: Event Invoke error - {ex.Message}");
+ // bmp.Dispose(); // 寮傚父鏃堕噴鏀捐祫婧�
+ // }
+ //});
}
catch (Exception ex)
{
AsyncLogHelper.Error($"LBCamera: CreateBitmap error - {ex.Message}");
}
}
+ /// <summary>
+ /// 澶勭悊CollectedImages涓殑缂撳瓨鍥惧儚
+ /// 鏍稿績閫昏緫锛氶亶鍘嗗彇绗竴涓浘鍍� -> 璧嬪�肩粰CallBackImg -> 瑙﹀彂浜嬩欢 -> 閲婃斁骞剁Щ闄�
+ /// </summary>
+ private void ProcessCollectedImages()
+ {
+ Task.Factory.StartNew(() =>
+ {
+ // 鍔犻攣淇濊瘉绾跨▼瀹夊叏锛岄槻姝㈠绾跨▼鍚屾椂鎿嶄綔鍒楄〃
+ lock (_collectedImagesLock)
+ {
+ // 鏍¢獙褰撳墠鐩告満鐨勫浘鍍忓垪琛ㄦ槸鍚﹀瓨鍦ㄤ笖鏈夋暟鎹�
+ if (!CollectedImages.ContainsKey(SN) || CollectedImages[SN].Count == 0)
+ {
+ AsyncLogHelper.Info(SN + "褰撳墠鏃犵紦瀛樺浘鍍忥紝璺宠繃澶勭悊");
+ return;
+ }
+ // 寰幆澶勭悊锛氱洿鍒板垪琛ㄤ负绌�
+ while (CollectedImages[SN].Count > 0)
+ {
+ try
+ {
+ // 1 鍙栧垪琛ㄧ涓�涓储寮曠殑鍥惧儚璧嬪�肩粰CallBackImg
+ Bitmap firstBitmap = CollectedImages[SN][0];
+ ImageGrabbed?.Invoke(this, new LBCameraEventArgs(SN, firstBitmap, true));
+ CallBackImg = (Bitmap)firstBitmap.Clone(); // 鍏嬮殕閬垮厤鍘熷璞¤閲婃斁鍚庡紩鐢ㄥけ鏁�
+
+ // 2 鑾峰彇瑙﹀彂妯″紡骞跺垽鏂槸鍚﹁Е鍙戣繍琛屼簨浠�
+ if (GetTriggerMode(out TriggerMode mode, out TriggerSource source))
+ {
+ // 纭Е鍙戞ā寮忎笅瑙﹀彂杩愯浜嬩欢
+ if (mode == TriggerMode.On && source != TriggerSource.Software)
+ {
+ AsyncLogHelper.Info(SN + $"瑙﹀彂纭Е鍙戜簨浠讹紝瑙﹀彂婧愶細{source}");
+ TriggerRunMessageReceived?.Invoke(SN, source.ToString());
+ }
+ }
+ else
+ {
+ AsyncLogHelper.Warn(SN + "鑾峰彇瑙﹀彂妯″紡澶辫触锛岃烦杩囦簨浠惰Е鍙�");
+ }
+
+ // 3 閲婃斁绗竴涓浘鍍忚祫婧愬苟浠庡垪琛ㄧЩ闄�
+ // 鍏堥噴鏀綛itmap鍐呭瓨锛屽啀绉婚櫎鍒楄〃鍏冪礌
+ firstBitmap.Dispose();
+ CollectedImages[SN].RemoveAt(0);
+ AsyncLogHelper.Info(SN + $"宸叉秷璐圭紦瀛樺浘鍍忥紝鍓╀綑缂撳瓨鏁伴噺锛歿CollectedImages[SN].Count}");
+ }
+ catch (Exception ex)
+ {
+ AsyncLogHelper.Error(SN + $"澶勭悊缂撳瓨鍥惧儚寮傚父锛歿ex.Message}", ex);
+ // 鍗曚釜鍥惧儚澶勭悊澶辫触鏃讹紝绉婚櫎璇ュ浘鍍忛伩鍏嶉樆濉炲悗缁鐞�
+ if (CollectedImages[SN].Count > 0)
+ {
+ try
+ {
+ CollectedImages[SN][0]?.Dispose(); // 灏濊瘯閲婃斁
+ CollectedImages[SN].RemoveAt(0);
+ }
+ catch (Exception innerEx)
+ {
+ AsyncLogHelper.Error(SN + $"娓呯悊寮傚父鍥惧儚澶辫触锛歿innerEx.Message}", innerEx);
+ }
+ }
+ // 鍗曚釜鍥惧儚澶勭悊澶辫触涓嶇粓姝㈠惊鐜紝缁х画澶勭悊涓嬩竴涓�
+ // 4. 鎵�鏈夊浘鍍忓鐞嗗畬鎴愬悗锛屾竻绌篊allBackImg
+ if (CallBackImg != null)
+ {
+ CallBackImg.Dispose();
+ CallBackImg = null;
+ }
+ continue;
+ }
+ // 4. 鎵�鏈夊浘鍍忓鐞嗗畬鎴愬悗锛屾竻绌篊allBackImg
+ if (CallBackImg != null)
+ {
+ CallBackImg.Dispose();
+ CallBackImg = null;
+ }
+ }
+ }
+ });
+ }
+
private void SyncConfigFromCamera()
{
--
Gitblit v1.9.3