From 87a51c004242323d6bc80c470115ef69117bcb1b Mon Sep 17 00:00:00 2001
From: C3204 <zhengyabo@lanpucloud.cn>
Date: 星期五, 26 十二月 2025 09:52:47 +0800
Subject: [PATCH] ”修复一部分工具图像转换问题以及内存释放问题。“
---
LB_VisionProcesses/Cameras/CameraConfig.cs | 50 ++++++++++++++++++++++++++++++++++++++++----------
1 files changed, 40 insertions(+), 10 deletions(-)
diff --git a/LB_VisionProcesses/Cameras/CameraConfig.cs b/LB_VisionProcesses/Cameras/CameraConfig.cs
index fa0bb79..8210a2e 100644
--- a/LB_VisionProcesses/Cameras/CameraConfig.cs
+++ b/LB_VisionProcesses/Cameras/CameraConfig.cs
@@ -1,6 +1,7 @@
锘縰sing Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using OpenCvSharp;
+using OpenCvSharp.Extensions;
using System.Collections.Concurrent;
using System.Diagnostics;
using System.Text;
@@ -190,7 +191,7 @@
Mat src = Cv2.ImRead(SN);
if (src != null && !src.Empty())
- OutputImage = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(src);
+ OutputImage = src.ToBitmap();
}
}
}
@@ -206,12 +207,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 +257,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 +275,9 @@
} while (times > 0 && isRegrab);
if (isUpParams)
+ {
Camera.SetCamConfig(oriConfig);
-
+ }
OutputImage = bitmap;
}
@@ -281,14 +300,23 @@
{
Result = true;
Msg = "";
- OutputImage = null;
-
+ if (OutputImage != null)
+ {
+ if (OutputImage is Bitmap)
+ {
+ ((Bitmap)OutputImage).Dispose();
+ }
+ OutputImage = null;
+ }
if (Record != null)
+ {
Record.Dispose();
+ }
}
public override void Dispose()
{
+
return;
}
@@ -302,7 +330,9 @@
if (OutputImage != null)
{
if (OutputImage is Bitmap)
+ {
obj.OutputImage = ((Bitmap)OutputImage).Clone();
+ }
}
return obj;
--
Gitblit v1.9.3