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