From f8ad0695ff2431cb90640be52b523d6434bdbf83 Mon Sep 17 00:00:00 2001
From: mrDarker <mr.darker@163.com>
Date: 星期五, 22 八月 2025 15:48:03 +0800
Subject: [PATCH] Merge branch 'LWQ' into liuyang

---
 EdgeInspector_App/Recipe/HardwareSettings.h   |    1 
 EdgeInspector_App/Define/InspectionBase.cpp   |    2 
 EdgeInspector_App/Define/InspectionBase.h     |   12 +-
 EdgeInspector_App/View/ViewMain_HWSetting.cpp |    3 
 EdgeInspector_App/Process/InspectCamera.cpp   |    1 
 EdgeInspector_App/Data/PostProcess.h          |    3 
 EdgeInspector_App/Define/Global_Define.h      |   98 ++++++++++++------------
 EdgeInspector_App/Define/StatusMonitor.cpp    |    6 
 EdgeInspector_App/Data/PostProcess.cpp        |   20 ++++
 EdgeInspector_App/EdgeInspector_App.rc        |    0 
 EdgeInspector_App/Define/StatusMonitor.h      |   10 +-
 EdgeInspector_App/Recipe/HardwareSettings.cpp |   34 ++++++++
 EdgeInspector_App/resource.h                  |    2 
 EdgeInspector_App/BICommon.h                  |    2 
 14 files changed, 123 insertions(+), 71 deletions(-)

diff --git a/EdgeInspector_App/BICommon.h b/EdgeInspector_App/BICommon.h
index 1688d1f..55e9bd0 100644
--- a/EdgeInspector_App/BICommon.h
+++ b/EdgeInspector_App/BICommon.h
@@ -11,7 +11,7 @@
 #define OFFLINE_KEY           1   //OFFLINE_KEY:1鏄绾挎ā寮�;0鏄湪绾挎ā寮�
 #define MINI_LED              0   //Mini杞﹂棿
 #define MINI_NOTCH			  0   //Mini杞﹂棿, 鏄惁浣跨敤鍒绘Ы鍔熻兘
-#define HALCON_VISION_KEY     0   //鏄惁鍚敤HALCON
+#define HALCON_VISION_KEY     1   //鏄惁鍚敤HALCON
 #define USE_WEBSOCKET         0   //鏄惁鍚敤websocket(AI)
 #define USE_AI_DETECT         0   //鏄惁鍚敤AI妫�娴�
 
diff --git a/EdgeInspector_App/Data/PostProcess.cpp b/EdgeInspector_App/Data/PostProcess.cpp
index 513be32..a2bd149 100644
--- a/EdgeInspector_App/Data/PostProcess.cpp
+++ b/EdgeInspector_App/Data/PostProcess.cpp
@@ -656,6 +656,16 @@
 		int fontFace = cv::FONT_HERSHEY_TRIPLEX;
 		double fontScale = 0.7;
 		int thickness = 1;
+		
+			if (m_pHardware->m_bUse_SaveDLDefectImage==TRUE)
+			{
+				if (eCategory== DefectLoc_Chip|| eCategory== DefectLoc_Crack|| eCategory == DefectLoc_Burr|| eCategory == DefectLoc_In_Chip|| eCategory == DefectLoc_In_Burr|| eCategory == DefectLoc_UserDefect)
+				{
+					CT2CA pszConvertedAnsiDLFile(strDLFile);
+					cv::String strDLFile(pszConvertedAnsiDLFile);
+					cv::imwrite(strDLFile, imgTmp);
+				}
+			}
 
 		CT2CA pszConvertedAnsiTitle(strTitle);
 		cv::String strCVTitle(pszConvertedAnsiTitle);
@@ -1462,16 +1472,19 @@
 		}
 
 		CString strSaveImagePath;
+		CString strSaveImageDLPath;
 		//strSaveImagePath.Format(_T("%s\\%03d_%s_%s_%s.jpg"),m_strDefectFolder,pNewDefect->m_nIdx, g_pBase->m_strHPanelID, PANEL_SIDE[pNewDefect->m_DefectInfo.m_nSideIdx], strDefectType);
 		strSaveImagePath.Format(_T("%s\\%s_%s_%s_%d.jpg"),m_strDefectFolder, g_pBase->m_strHPanelID, PANEL_SIDE[pDefect->m_DefectInfo.m_nSideIdx], strDefectType, pDefect->m_nIdx);
-
-		CRect rectDefect;
+		strSaveImageDLPath.Format(_T("%s\\%s_%s_%s_%d.bmp"),m_strImageDLFolder, g_pBase->m_strHPanelID, PANEL_SIDE[pDefect->m_DefectInfo.m_nSideIdx], strDefectType, pDefect->m_nIdx);
+		CRect rectDefect; 
 		rectDefect.left		= DEFECTIMAGE_WIDTH/2	- pDefect->m_DefectInfo.m_rtDefectPos_pxl.Width()/2;
 		rectDefect.right	= DEFECTIMAGE_WIDTH/2	+ pDefect->m_DefectInfo.m_rtDefectPos_pxl.Width()/2;
 		rectDefect.top		= DEFECTIMAGE_HEIGHT/2	- pDefect->m_DefectInfo.m_rtDefectPos_pxl.Height()/2;
 		rectDefect.bottom	= DEFECTIMAGE_HEIGHT/2	+ pDefect->m_DefectInfo.m_rtDefectPos_pxl.Height()/2;
 
 		CheckDirectory(strSaveImagePath);
+		CheckDirectory(strSaveImageDLPath);
+		strDLFile.Format(_T("%s"), strSaveImageDLPath);
 		// SaveDefectImage2(pNewDefect->m_Image,CSize(DEFECTIMAGE_WIDTH,DEFECTIMAGE_HEIGHT), rectDefect, strSaveImagePath);
 		SaveDefectImage_with_Title(pDefect, CSize(DEFECTIMAGE_WIDTH,DEFECTIMAGE_HEIGHT), rectDefect, strSaveImagePath);
 
@@ -2003,6 +2016,9 @@
 	m_strDefectFolder.Format(_T("%s\\IMG_DEFECT\\%s\\%s"),PATH_INSPECTION_DATA,g_pBase->m_strLoadingDay,g_pBase->m_strHPanelID);
 	DeleteFolder(m_strDefectFolder);
 	CheckDirectory(m_strDefectFolder,TRUE);
+	m_strImageDLFolder.Format(_T("%s\\IMG_DEFECT_DL\\%s\\%s"), PATH_INSPECTION_DATA, g_pBase->m_strLoadingDay, g_pBase->m_strHPanelID);
+	DeleteFolder(m_strImageDLFolder);
+	CheckDirectory(m_strImageDLFolder, TRUE);
 	m_strSplineFolder.Format(_T("%s\\SPLINE\\%s\\%s"),PATH_INSPECTION_DATA,g_pBase->m_strLoadingDay,g_pBase->m_strHPanelID);
 	CheckDirectory(m_strSplineFolder);
 	m_strFullImgeFolder.Format(_T("%s\\IMG_FULL\\%s\\%s"),PATH_INSPECTION_DATA,g_pBase->m_strLoadingDay,g_pBase->m_strHPanelID);
diff --git a/EdgeInspector_App/Data/PostProcess.h b/EdgeInspector_App/Data/PostProcess.h
index 807e659..623d4a2 100644
--- a/EdgeInspector_App/Data/PostProcess.h
+++ b/EdgeInspector_App/Data/PostProcess.h
@@ -74,7 +74,8 @@
 	CString			m_strSplineFolder;
 	CString			m_strFullImgeFolder;
 	CString			m_strImageMarkFolder;
-
+	CString			m_strImageDLFolder;
+	CString			 strDLFile;	
 	void*			m_pView;
 };
 
diff --git a/EdgeInspector_App/Define/Global_Define.h b/EdgeInspector_App/Define/Global_Define.h
index 20d9aac..3df4976 100644
--- a/EdgeInspector_App/Define/Global_Define.h
+++ b/EdgeInspector_App/Define/Global_Define.h
@@ -1,4 +1,4 @@
-锘�#ifndef GLOBAL_DEFINE_H
+#ifndef GLOBAL_DEFINE_H
 #define GLOBAL_DEFINE_H
 
 #include <map>
@@ -42,11 +42,11 @@
 #define CHKMAX(a,b)    (((a) > (b)) ? (a) : (b))
 #define CHKMIN(a,b)    (((a) < (b)) ? (a) : (b))
 
-#define MAX_PANEL_SIDE							4			// 鎼� 鑽� 
-#define	UPDN_TYPE								2			// 鎯戠獚 闉嶆崬 涔愮话鐗堝揩 2 绐嶅敱鐖� 涔愮话鐗堝揩 1
+#define MAX_PANEL_SIDE							4			// 搁 荐 
+#define	UPDN_TYPE								2			// 惑窍 鞍捞 乐绰版快 2 窍唱父 乐绰版快 1
 #define MAX_SIDE_COUNT							8
 #define MAX_CORNER_DIMENSION_MEASURE_COUNT		5
-#define MAX_SIDE_DIMENSION_MEASURE_COUNT		16			// 寮ユ帾 Frame 鑽� 鐖舵��
+#define MAX_SIDE_DIMENSION_MEASURE_COUNT		16			// 弥措 Frame 荐 父怒
 
 #define MAX_SIDE_EXCEPTION_AREA_COUNT			32
 #define MAX_SIDE_USER_DEFECT_AREA_COUNT			32
@@ -87,7 +87,7 @@
 
 	enum	EmSplashCmd					{emShow=0, emHide, emText};
 
-	enum	ScanDirectionIns			{ SD_Forward = 0, SD_Backward, SD_Unknown };	// Glass 鎵侀湒 Scan 瑙勬阿.
+	enum	ScanDirectionIns			{ SD_Forward = 0, SD_Backward, SD_Unknown };	// Glass 扁霖 Scan 规氢.
 	enum	DimensionDir				{ DIMENSION_A=0, DIMENSION_B, DIMENSION_C, DIMENSION_D,DIMENSION_A_DN, DIMENSION_B_DN, DIMENSION_C_DN, DIMENSION_D_DN, DIMENSION_NONE};
 	enum	EM_CORNER_JUDGE				{A_ZONE_CRACK=0,B_ZONE_CRACK,B_ZONE_BURR,C_ZONE_CRACK,C_ZONE_BURR, D_ZONE_CRACK, EDGE_THINCRACK, CHIP_WHITE};
 
@@ -188,17 +188,17 @@
 #define IMAGE_WIDTH						4096 // 8192//2048
 #define IMAGE_HEIGHT					1024	
 #define MAX_IMAGE_FRAME					160//100
-#define MAX_IMAGE_FRAME_SHORT			160//100			// 寮ユ帾 姗囬キ鐑� 鑽� 
-#define MAX_IMAGE_FRAME_LONG			160//100			// 寮ユ帾 姗囬キ鐑� 鑽�
+#define MAX_IMAGE_FRAME_SHORT			160//100			// 弥措 橇饭烙 荐 
+#define MAX_IMAGE_FRAME_LONG			160//100			// 弥措 橇饭烙 荐
 
 #define MAX_SIDE_INSPECT_AREA_COUNT		12
 
-#define MAX_IMAGE_LINE_SHORT	MAX_IMAGE_FRAME_SHORT		  * IMAGE_HEIGHT // 寮ユ帾 鎵肩墷鑽� 
-#define MAX_IMAGE_LINE_LONG		MAX_IMAGE_FRAME_LONG		  * IMAGE_HEIGHT // 寮ユ帾 鎵肩墷鑽� 
+#define MAX_IMAGE_LINE_SHORT	MAX_IMAGE_FRAME_SHORT		  * IMAGE_HEIGHT // 弥措 扼牢荐 
+#define MAX_IMAGE_LINE_LONG		MAX_IMAGE_FRAME_LONG		  * IMAGE_HEIGHT // 弥措 扼牢荐 
 #define MAX_IMAGE_LINE			MAX_IMAGE_LINE_LONG
 #define MAX_LIMIT_LINE			(MAX_IMAGE_FRAME - 1) * IMAGE_HEIGHT
 
-#define MAX_IMAGE_LINE_MARGIN		((MAX_IMAGE_FRAME+50) * IMAGE_HEIGHT) //(150 * IMAGE_HEIGHT) // 寮ユ帾 鎵肩墷鑽� 
+#define MAX_IMAGE_LINE_MARGIN		((MAX_IMAGE_FRAME+50) * IMAGE_HEIGHT) //(150 * IMAGE_HEIGHT) // 弥措 扼牢荐 
 
 #define ALIGN_4BYTE(width)		(width + 3)/4*4
 #define PI						3.14159265358979323846
@@ -331,53 +331,53 @@
 #define MAX_SIDE_INSPECT_TYPE 8
 
 struct WSSendData {
-	//=======================寰呭畾==========================
-	//uint8_t operation;      // 鎿嶄綔绗� (1瀛楄妭)
-	//uint8_t operand;        // 鎿嶄綔鏁� (1瀛楄妭)
-	//uint16_t blockNumber;   // 鍥惧儚鍧楃紪鍙� (2瀛楄妭鏃犵鍙锋暣鏁�)
-	//uint32_t dataOffset;    // 鏁版嵁鍋忕Щ (4瀛楄妭鏃犵鍙锋暣鏁�)
+	//=======================待定==========================
+	//uint8_t operation;      // 操作符 (1字节)
+	//uint8_t operand;        // 操作数 (1字节)
+	//uint16_t blockNumber;   // 图像块编号 (2字节无符号整数)
+	//uint32_t dataOffset;    // 数据偏移 (4字节无符号整数)
 	//=====================================================
 
-	uint8_t nCheckType = 0;       // 妫�娴嬬被鍨�
-	uint8_t nRecipe = 0;          // 閰嶆柟
-	uint8_t nLineType = 0;        // 绾垮埆绫诲瀷
-	uint8_t nIndex = 0;           // 鍥剧墖搴忓彿
-	uint8_t nFrameIdx = 0;        // 甯у簭鍙�
-	uint8_t nScanIdx = 0;         // 渚у埆
-	uint8_t nNGType = 0;          // NG 绫诲瀷
-	uint8_t nPosition = 0;        // 浣嶇疆
-	uint8_t	nState = 0;           // 鐘舵��
-	uint16_t nEdgeX = 0;          // X鏂瑰悜杈圭紭鍧愭爣
-	uint16_t nEdgeY = 0;          // X鏂瑰悜杈圭紭鍧愭爣
-	uint16_t nNPointY = 0;        // Y鏂瑰悜NG鍖哄煙鍧愭爣
-	uint16_t nWidth = 0;          // 鍥惧儚瀹藉害
-	uint16_t nHeight = 0;         // 鍥惧儚楂樺害
-	double dTimeStamp = 0.0;      // 鏃堕棿鎴�
-	uint16_t nLeft = 0;           // 鍦ㄥ師鍥剧殑浣嶇疆
-	uint16_t nTop = 0;            // 鍦ㄥ師鍥剧殑浣嶇疆
-	std::string strSN = "";       // 搴忓垪鍙�
-	std::vector<char> image = {}; // 鍥惧儚鏁版嵁 (浜岃繘鍒舵暟鎹�)
+	uint8_t nCheckType = 0;       // 检测类型
+	uint8_t nRecipe = 0;          // 配方
+	uint8_t nLineType = 0;        // 线别类型
+	uint8_t nIndex = 0;           // 图片序号
+	uint8_t nFrameIdx = 0;        // 帧序号
+	uint8_t nScanIdx = 0;         // 侧别
+	uint8_t nNGType = 0;          // NG 类型
+	uint8_t nPosition = 0;        // 位置
+	uint8_t	nState = 0;           // 状态
+	uint16_t nEdgeX = 0;          // X方向边缘坐标
+	uint16_t nEdgeY = 0;          // X方向边缘坐标
+	uint16_t nNPointY = 0;        // Y方向NG区域坐标
+	uint16_t nWidth = 0;          // 图像宽度
+	uint16_t nHeight = 0;         // 图像高度
+	double dTimeStamp = 0.0;      // 时间戳
+	uint16_t nLeft = 0;           // 在原图的位置
+	uint16_t nTop = 0;            // 在原图的位置
+	std::string strSN = "";       // 序列号
+	std::vector<char> image = {}; // 图像数据 (二进制数据)
 };
 
 struct WSReceiveData {
-	// 瀹氫箟涓�涓〃绀篘G浣嶇疆鐨勭粨鏋勪綋
+	// 定义一个表示NG位置的结构体
 	struct NGPosition {
-		uint8_t nNGType = 0;     // NG 绫诲瀷
-		uint16_t nLeft = 0;      // 鍦ㄥ師鍥剧殑浣嶇疆
-		uint16_t nTop = 0;       // 鍦ㄥ師鍥剧殑浣嶇疆
-		uint16_t nRight = 0;     // 鍦ㄥ師鍥剧殑浣嶇疆
-		uint16_t nBottom = 0;    // 鍦ㄥ師鍥剧殑浣嶇疆
+		uint8_t nNGType = 0;     // NG 类型
+		uint16_t nLeft = 0;      // 在原图的位置
+		uint16_t nTop = 0;       // 在原图的位置
+		uint16_t nRight = 0;     // 在原图的位置
+		uint16_t nBottom = 0;    // 在原图的位置
 	};
 
-	uint8_t nRecipe = 0;         // 閰嶆柟
-	uint8_t nLineType = 0;       // 绾垮埆绫诲瀷
-	uint8_t nIndex = 0;          // 鍥剧墖搴忓彿
-	uint8_t nFrameIdx = 0;       // 甯у簭鍙�
-	uint8_t nScanIdx = 0;        // 渚у埆
-	std::string strSN = "";      // 搴忓垪鍙�
-	double dTimeStamp = 0.0;     // 鏃堕棿鎴�
-	uint8_t nGNum = 0;           // NG 鏁伴噺
-	std::vector<NGPosition> ngPosArray = {}; // NG 浣嶇疆鏁扮粍
+	uint8_t nRecipe = 0;         // 配方
+	uint8_t nLineType = 0;       // 线别类型
+	uint8_t nIndex = 0;          // 图片序号
+	uint8_t nFrameIdx = 0;       // 帧序号
+	uint8_t nScanIdx = 0;        // 侧别
+	std::string strSN = "";      // 序列号
+	double dTimeStamp = 0.0;     // 时间戳
+	uint8_t nGNum = 0;           // NG 数量
+	std::vector<NGPosition> ngPosArray = {}; // NG 位置数组
 };
 
 #endif // GLOBAL_DEFINE_H
\ No newline at end of file
diff --git a/EdgeInspector_App/Define/InspectionBase.cpp b/EdgeInspector_App/Define/InspectionBase.cpp
index c14d529..db1192c 100644
--- a/EdgeInspector_App/Define/InspectionBase.cpp
+++ b/EdgeInspector_App/Define/InspectionBase.cpp
@@ -1,4 +1,4 @@
-锘�#include "stdafx.h"
+#include "stdafx.h"
 #include "config.h"
 
 const TCHAR *PANEL_SIDE[]		= {_T("A_TOP"), _T("B_TOP"), _T("C_TOP"), _T("D_TOP"),_T("A_BOT"), _T("B_BOT"), _T("C_BOT"), _T("D_BOT")};
diff --git a/EdgeInspector_App/Define/InspectionBase.h b/EdgeInspector_App/Define/InspectionBase.h
index 0801f8c..737765f 100644
--- a/EdgeInspector_App/Define/InspectionBase.h
+++ b/EdgeInspector_App/Define/InspectionBase.h
@@ -1,4 +1,4 @@
-锘�// HMX64Fundamentals.h: interface for the CHMX64Fundamentals class.
+// HMX64Fundamentals.h: interface for the CHMX64Fundamentals class.
 //
 //////////////////////////////////////////////////////////////////////
 
@@ -17,17 +17,17 @@
 public:			
 	CStringArray		m_strCamCCA;
 	CStringArray		m_strCamCVI;	
-	int					*m_pBufferSize;			// Grab淇婅緫 Buffer鐙� 鍐滄墎.
-	int					*m_pBufferCount;			// Grab Buffer鐙� 鑽�.
-	int					*m_pMemFrameNo;			// 瑙掑姏 鐨嬭憶搴� 姗囬キ鐑� 鑽�	
+	int					*m_pBufferSize;			// Grab俊辑 Buffer狼 农扁.
+	int					*m_pBufferCount;			// Grab Buffer狼 荐.
+	int					*m_pMemFrameNo;			// 角力 皋葛府 橇饭烙 荐	
 	int					*m_pCameraPort;
 	int					*m_pFrameHeight;
 	int					*m_pFrameWidth;	
 	int					*m_nBoardID;
 	int					*m_nBoardCh;
 	AcqMode				m_AcqMode;
-	int					m_nFrameDefectPixel;	// 鑼� Frame鐙� 寮ユ帾 鎼獌 Pixel 鑽�
-	int					m_nMaxDefect;			// miniont,2011-04-28, 寮ユ帾 鎼獌 淇鸿崘			
+	int					m_nFrameDefectPixel;	// 茄 Frame狼 弥措 搬窃 Pixel 荐
+	int					m_nMaxDefect;			// miniont,2011-04-28, 弥措 搬窃 俺荐			
 	int					m_nCameraCount;	
 	int					m_nScanCount;
 	int					m_nThreadCount;
diff --git a/EdgeInspector_App/Define/StatusMonitor.cpp b/EdgeInspector_App/Define/StatusMonitor.cpp
index d3b61b9..ea165b6 100644
--- a/EdgeInspector_App/Define/StatusMonitor.cpp
+++ b/EdgeInspector_App/Define/StatusMonitor.cpp
@@ -1,4 +1,4 @@
-锘�#include "StdAfx.h"
+#include "StdAfx.h"
 #include "StatusMonitor.h"
 
 
@@ -66,13 +66,13 @@
 	TCHAR szTemp[MAX_PATH];
 
 	wcscpy_s(szTemp, MAX_PATH, strFolder);
-	szTemp[strFolder.GetLength() + 1] = NULL; // NULL宸╃鍟� 婊翠亢 鐢哥虎鍟婂叿 鑼勪績.
+	szTemp[strFolder.GetLength() + 1] = NULL; // NULL巩磊啊 滴俺 甸绢啊具 茄促.
 
 	FileOp.hwnd = NULL;
 	FileOp.wFunc = FO_DELETE;
 	FileOp.pFrom = NULL;
 	FileOp.pTo = NULL;
-	FileOp.fFlags = FOF_NOCONFIRMATION | FOF_NOERRORUI; // 鐘墷鐨嬬煫鐦ゅ晩 鏁戝搯妗e簾 姹叉播
+	FileOp.fFlags = FOF_NOCONFIRMATION | FOF_NOERRORUI; // 犬牢皋矫瘤啊 救哆档废 汲沥
 	FileOp.fAnyOperationsAborted = false;
 	FileOp.hNameMappings = NULL;
 	FileOp.lpszProgressTitle = NULL;
diff --git a/EdgeInspector_App/Define/StatusMonitor.h b/EdgeInspector_App/Define/StatusMonitor.h
index 7ad3b82..624fbf6 100644
--- a/EdgeInspector_App/Define/StatusMonitor.h
+++ b/EdgeInspector_App/Define/StatusMonitor.h
@@ -1,4 +1,4 @@
-锘�#pragma once
+#pragma once
 
 #include "Singleton.h"
 #include "Config.h"
@@ -16,13 +16,13 @@
 #include "LicenseChecker.h"
 
 /* 
-Main Interface 鐙� Instance Pointer 鐢� 鐖辩粖 涔愮话淇�. 
+Main Interface 狼 Instance Pointer 甫 爱绊 乐绰促. 
 
-UI淇婅緫缁� Main Interface 绔嬭緹闃� 绐嶉湼鐧绘悂 鎯戦緥 鏇肩偧鎹為鑲�,
+UI俊辑绰 Main Interface 立辟阑 窍霸登搁 惑龋 曼炼捞骨肺,
 
-CStatusMonitor 鑲� 闃� Instance 淇� 绔嬭緹绐嶆。搴� 绐嶇
+CStatusMonitor 肺 阿 Instance 俊 立辟窍档废 窍磊
 
-UI 浠樹績 Interface 鐖堕潧缁拌姯 钃栨弧鏍忚仾鐦�
+UI 付促 Interface 父靛绰芭 蓖满栏聪瘪
 */
 
 class CStatusMonitor : public Singleton<CStatusMonitor>
diff --git a/EdgeInspector_App/EdgeInspector_App.rc b/EdgeInspector_App/EdgeInspector_App.rc
index 14866ad..98dcacf 100644
--- a/EdgeInspector_App/EdgeInspector_App.rc
+++ b/EdgeInspector_App/EdgeInspector_App.rc
Binary files differ
diff --git a/EdgeInspector_App/Process/InspectCamera.cpp b/EdgeInspector_App/Process/InspectCamera.cpp
index 0f820fd..be5b2f7 100644
--- a/EdgeInspector_App/Process/InspectCamera.cpp
+++ b/EdgeInspector_App/Process/InspectCamera.cpp
@@ -4520,6 +4520,7 @@
 	int iFrame = stFrame.nFrameIdx;
 	CRect rtProcessArea = rtROI;
 
+
 	int nMinSize_X = (pNotchParam->m_nNotch_Inspect_Defect_Min_X_um / (int)m_pGlassData->GetSideData(emDim)->m_dPixelSizeX);
 	int nMinSize_Y = (pNotchParam->m_nNotch_Inspect_Defect_Min_Y_um / (int)m_pGlassData->GetSideData(emDim)->m_dPixelSizeY);
 	int nMinSize = 0;
diff --git a/EdgeInspector_App/Recipe/HardwareSettings.cpp b/EdgeInspector_App/Recipe/HardwareSettings.cpp
index e7f9f00..1d0d633 100644
--- a/EdgeInspector_App/Recipe/HardwareSettings.cpp
+++ b/EdgeInspector_App/Recipe/HardwareSettings.cpp
@@ -1041,6 +1041,10 @@
 		m_bEnableAutoDelete = rhs.m_bEnableAutoDelete;
 		m_strDeleteToolExePath = rhs.m_strDeleteToolExePath;
 		m_strDeleteToolConfigPath = rhs.m_strDeleteToolConfigPath;
+
+		// lwq,2025.08.04
+		m_bUse_SaveDLDefectImage = rhs.m_bUse_SaveDLDefectImage;
+		
 	}
 	return *this;
 }
@@ -1282,7 +1286,9 @@
 		str = _T("DELETETOOL_EXE_PATH");
 	else if ((void*)&m_strDeleteToolConfigPath == pValue)
 		str = _T("DELETETOOL_CONFIG_PATH");
-	
+	// lwq,2025.08.04
+    	else if ((void*)&m_bUse_SaveDLDefectImage == pValue)
+		str = _T("SAVE_DLDEFECT_IMAGE");
 	return str;
 }
 
@@ -1465,6 +1471,11 @@
 		return FALSE;
 	BasicInfoFile.GetItemValue((TCHAR*)(LPCTSTR)str, m_strDeleteToolConfigPath, _T(""));
 
+	// ly,2025.08.04
+	str = GetFileString((void*)&m_bUse_SaveDLDefectImage);
+	if (str.IsEmpty() == TRUE)
+		return FALSE;
+	BasicInfoFile.GetItemValue((TCHAR*)(LPCTSTR)str, m_bUse_SaveDLDefectImage, FALSE);
 	return TRUE;
 }
 
@@ -1645,6 +1656,12 @@
 		return FALSE;
 	Register.GetItemValue((TCHAR*)(LPCTSTR)str, m_strDeleteToolConfigPath, _T(""));
 
+	// lwq,2025.08.04
+	str = GetFileString((void*)&m_bUse_SaveDLDefectImage);
+	if (str.IsEmpty() == TRUE)
+		return FALSE;
+	Register.GetItemValue((TCHAR*)(LPCTSTR)str, m_bUse_SaveDLDefectImage, FALSE);
+
 	return TRUE;
 }
 
@@ -1808,6 +1825,12 @@
 		return FALSE;
 	Register.SetItemValue((TCHAR*)(LPCTSTR)str, m_strDeleteToolConfigPath);
 
+	//lwq2025.08.04
+	str = GetFileString((void*)&m_bUse_SaveDLDefectImage);
+	if (str.IsEmpty() == TRUE)
+		return FALSE;
+	Register.SetItemValue((TCHAR*)(LPCTSTR)str, (int)m_bUse_SaveDLDefectImage);
+
 	return TRUE;
 }
 
@@ -1953,7 +1976,7 @@
 	if (str.IsEmpty() == TRUE)
 		return FALSE;
 	BasicInfoFile.SetItemValue((TCHAR*)(LPCTSTR)str, (int)m_bSaveResultByHour);
-
+	
 	// ly,2025.07.07
 	str = GetFileString((void*)&m_bEnableAutoCopy);
 	if (str.IsEmpty() == TRUE)
@@ -1980,6 +2003,13 @@
 		return FALSE;
 	BasicInfoFile.SetItemValue((TCHAR*)(LPCTSTR)str, m_strDeleteToolConfigPath);
 
+
+	//lwq,2025.08.04
+	str = GetFileString((void*)&m_bUse_SaveDLDefectImage);
+	if (str.IsEmpty() == TRUE)
+		return FALSE;
+	BasicInfoFile.SetItemValue((TCHAR*)(LPCTSTR)str, m_bUse_SaveDLDefectImage);
+
 	BasicInfoFile.WriteToFile();
 
 	return TRUE;
diff --git a/EdgeInspector_App/Recipe/HardwareSettings.h b/EdgeInspector_App/Recipe/HardwareSettings.h
index afb57c3..8f1ebe7 100644
--- a/EdgeInspector_App/Recipe/HardwareSettings.h
+++ b/EdgeInspector_App/Recipe/HardwareSettings.h
@@ -202,6 +202,7 @@
 
 public:
 	BOOL						m_bUse_SaveDebugImage;
+	BOOL						m_bUse_SaveDLDefectImage;
 
 public:
 	BOOL						m_bSaveResultByHour;
diff --git a/EdgeInspector_App/View/ViewMain_HWSetting.cpp b/EdgeInspector_App/View/ViewMain_HWSetting.cpp
index 888f978..dd8d68e 100644
--- a/EdgeInspector_App/View/ViewMain_HWSetting.cpp
+++ b/EdgeInspector_App/View/ViewMain_HWSetting.cpp
@@ -82,7 +82,8 @@
 
 	DDX_Check(pDX,IDC_CHECK_USE_SAVE_DEBUG_IMAGE,m_pDlgHDSettingParm->m_bUse_SaveDebugImage);	
 	DDX_Check(pDX, IDC_CHECK_USE_SAVE_ALL_DMP, g_bUse_SaveAllDMP);
-
+	
+		DDX_Check(pDX, IDC_CHECK_USE_SAVE_DL_IMAGE, m_pDlgHDSettingParm->m_bUse_SaveDLDefectImage);
 	DDX_Check(pDX, IDC_CHECK_SAVE_RESULT_BY_HOUR, m_pDlgHDSettingParm->m_bSaveResultByHour);		// ly,2025.07.10
 
 	DDX_Check(pDX, IDC_CHECK_ENABLE_AUTO_COPY, m_pDlgHDSettingParm->m_bEnableAutoCopy);				// ly,2025.07.07
diff --git a/EdgeInspector_App/resource.h b/EdgeInspector_App/resource.h
index c6d9a99..4fcc168 100644
--- a/EdgeInspector_App/resource.h
+++ b/EdgeInspector_App/resource.h
@@ -446,6 +446,8 @@
 #define IDC_RDO_SIGNAL1                 1181
 #define IDC_CHECK_USE_SAVE_ALL_DMP      1181
 #define IDC_RDO_SIGNAL2                 1182
+#define IDC_CHECK_USE_SAVE_ALL_DMP2     1182
+#define IDC_CHECK_USE_SAVE_DL_IMAGE     1182
 #define IDC_NEWPPID_NAME_TITLE          1201
 #define IDC_EDIT_PPIDNEW_NAME           1202
 #define IDC_BUTTON_LINK                 1203

--
Gitblit v1.9.3