From 1e1fbe300ba2b22246c6743147087d10cf6c9798 Mon Sep 17 00:00:00 2001
From: mrDarker <mr.darker@163.com>
Date: 星期二, 15 七月 2025 17:25:05 +0800
Subject: [PATCH] 修复:InterfaceManager.cpp保存图片添加锁

---
 EdgeInspector_App/InterfaceManager.cpp |   33 +++++++++++++++++++++------------
 1 files changed, 21 insertions(+), 12 deletions(-)

diff --git a/EdgeInspector_App/InterfaceManager.cpp b/EdgeInspector_App/InterfaceManager.cpp
index c1ef81f..e06011b 100644
--- a/EdgeInspector_App/InterfaceManager.cpp
+++ b/EdgeInspector_App/InterfaceManager.cpp
@@ -1821,21 +1821,26 @@
 {
 	g_pStatus->CheckDirectory(strPath);
 
-	BYTE* pBitBuffer;
-	FIBITMAP *bitmap = NULL;	
-
 	CString strSavePath = strPath;
 	strSavePath += _T(".jpg");
 
-	bitmap = FreeImage_Allocate(IMAGE_WIDTH, nLineCnt,8);
-	pBitBuffer = FreeImage_GetBits(bitmap);
-	if(pBitBuffer == NULL) {
-		FreeImage_Unload(bitmap);		
+	Lock();
+	FIBITMAP* bitmap = FreeImage_Allocate(IMAGE_WIDTH, nLineCnt, 8);
+	if (bitmap == NULL) {
+		Unlock();
 		return FALSE;
-	}			
+	}
 
-	LPBYTE lpImg = GetGrabBuffer((DimensionDir)iSide,ptStart.y);
+	BYTE* pBitBuffer = FreeImage_GetBits(bitmap);
+	if (pBitBuffer == NULL) {
+		FreeImage_Unload(bitmap);
+		Unlock();
+		return FALSE;
+	}
+
+	LPBYTE lpImg = GetGrabBuffer((DimensionDir)iSide, ptStart.y);
 	if (lpImg == NULL) {
+		Unlock();
 		return FALSE;
 	}
 
@@ -1846,10 +1851,10 @@
 	sprintf_s(str_filename, "%s", W2A(strSavePath));
 
 	FreeImage_FlipVertical(bitmap);
-	FreeImage_Save(FIF_JPEG, bitmap, str_filename,JPEG_FULLIMAGE_RATE);
-	FreeImage_Unload(bitmap);		
+	FreeImage_Save(FIF_JPEG, bitmap, str_filename, JPEG_FULLIMAGE_RATE);
+	FreeImage_Unload(bitmap);
 
-	return TRUE;
+	Unlock();
 }
 
 BOOL CInterfaceManager::SaveFullImageModern(CString strPath,LPBYTE lpOrigin,int nImgWidth,int nImgHeight,int iSide,int nStartY,int nQuality /*= 80*/)
@@ -1903,6 +1908,7 @@
 	cvReleaseImage(&pImgNew);
 	cvReleaseImageHeader(&pImg);
 #else
+	Lock();
 	// 原始图像数据转 cv::Mat
 	cv::Mat origin(nImgHeight, nImgWidth, CV_8UC1, lpOrigin + (nImgWidth * nStartY));
 
@@ -1921,9 +1927,12 @@
 	std::string strFilename = W2A(strPath);
 
 	if (!cv::imwrite(strFilename, resized, params)) {
+		Unlock();
 		g_pLog->DisplayMessage(_T("Save Full Image Fail(%s, %s, %d), imwrite failed"), strPath, PANEL_SIDE[iSide], nStartY);
 		return FALSE;
 	}
+
+	Unlock();
 #endif
 
 	g_pLog->DisplayMessage(_T("Save Full Image Success(%s, %s, %d, %d, %d)"), strPath, PANEL_SIDE[iSide], nStartY, nImgHeight, nQuality);	

--
Gitblit v1.9.3