Эх сурвалжийг харах

Z991239-2401 #comment feat: 新增高拍仪图片限制函数以及配置文件

陈纪林80310970 4 жил өмнө
parent
commit
dc59cf9991

+ 3 - 4
CMakeSettings.json

@@ -37,8 +37,7 @@
       "cmakeCommandArgs": "-D BUILD_TESTING=OFF",
       "buildCommandArgs": "",
       "ctestCommandArgs": "-C Release",
-      "inheritEnvironments": [ "msvc_x86" ],
-      "variables": []
+      "inheritEnvironments": [ "msvc_x86" ]
     },
     {
       "name": "ARM64-GCC-Debug",
@@ -50,7 +49,7 @@
       "buildCommandArgs": "",
       "ctestCommandArgs": "--output-on-failure",
       "inheritEnvironments": [ "linux_arm" ],
-      "remoteMachineName": "-2043786594;192.168.31.142 (username=liaogf, port=22, authentication=Password)",
+      "remoteMachineName": "2068923280;99.12.22.168 (username=vtm, port=22, authentication=Password)",
       "remoteCMakeListsRoot": "$HOME/.vs/${projectDirName}/${workspaceHash}/src",
       "remoteBuildRoot": "$HOME/.vs/${projectDirName}/${workspaceHash}/out/build/${name}",
       "remoteInstallRoot": "$HOME/.vs/${projectDirName}/${workspaceHash}/out/install/${name}",
@@ -84,7 +83,7 @@
           "type": "BOOL"
         }
       ],
-      "remoteMachineName": "-2043786594;192.168.31.142 (username=liaogf, port=22, authentication=Password)",
+      "remoteMachineName": "${defaultRemoteMachineName}",
       "remoteCMakeListsRoot": "$HOME/.vs/${projectDirName}/${workspaceHash}/src",
       "remoteBuildRoot": "$HOME/.vs/${projectDirName}/${workspaceHash}/out/build/${name}",
       "remoteInstallRoot": "$HOME/.vs/${projectDirName}/${workspaceHash}/out/install/${name}",

+ 5 - 2
Module/mod_HSPScanner/CMakeLists.txt

@@ -9,10 +9,13 @@ add_module_libraries(${MODULE_PREFIX} ${MODULE_NAME} ${MOD_VERSION_STRING})
 
 target_include_directories(${MODULE_NAME} PRIVATE
 	${DevHeadPath}
+    ${CONAN_INCLUDE_DIRS_OPENCV}
+    ${CONAN_INCLUDE_DIRS_OPENCV}/opencv2
 )
 
-set(${MODULE_PREFIX}_LIBS ${MODULE_BASE_LIBS})
-target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS})  
+set(${MODULE_PREFIX}_LIBS ${MODULE_BASE_LIBS}) 
+target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS} ${CONAN_LIBS_OPENCV})   #add ${CONAN_LIBS_OPENCV}
+target_link_directories(${MODULE_NAME} PRIVATE ${CONAN_BIN_DIRS_OPENCV} ${CONAN_LIB_DIRS_OPENCV}) #add all line
 
 target_include_directories(${MODULE_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
 

+ 93 - 1
Module/mod_HSPScanner/HSPScannerFSM.cpp

@@ -5,6 +5,9 @@
 #include "CommDevEntityErrorCode.h"
 #include "fileutil.h"
 
+#include "opencv.hpp"
+#include <math.h>
+
 #define RESET_TIMER_ID 1
 #define CHECK_CONNECT_TIMER_ID 2
 
@@ -1091,6 +1094,75 @@ int CHSPScannerFSM::StopPreview(SpReqAnsContext<HSPScannerService_CancelPreview_
 	return nRes;
 }
 
+bool CHSPScannerFSM::ResizeImage(CSimpleStringA fileName)
+{
+	LOG_FUNCTION();
+
+	double rate; //limit rate
+	int width;
+	int height;
+	bool success = TRUE;
+
+	CSmartPointer<IEntityFunction> spFunction = this->GetEntityBase()->GetFunction();
+	CSmartPointer<IConfigInfo> spConfig;
+	spFunction->OpenConfig(Config_Software, spConfig);
+	int kb = 0;
+	ErrorCodeEnum ec = spConfig->ReadConfigValueInt("Img", "KB", kb);
+	int imageSize = kb * 1024;
+
+	FILE* fHandle = fopen(fileName.GetData(), "rb");
+	if (!fHandle)
+	{
+		Dbg("Read file(%s) faild.", (LPCTSTR)fileName);
+		return FALSE;
+	}
+	
+	CSimpleStringA backUpFile = fileName + ".backup";
+	fileutil_copy_file((LPCTSTR)backUpFile, (LPCTSTR)fileName);
+
+	fseek(fHandle, 0, SEEK_END);
+	long fileSize = ftell(fHandle);
+	fclose(fHandle);
+
+	while (fileSize > imageSize)
+	{
+		rate = (double)fileSize / imageSize; 
+		rate = 1.0 / sqrt(rate); //width and height limit rate
+
+		cv::Mat img = cv::imread(fileName.GetData());
+
+		if (!img.data) 
+		{
+			Dbg("Invalid image(%s)!", (LPCTSTR)fileName);
+			success = FALSE;
+			break;
+		}
+
+		width = img.cols;
+		height = img.rows;
+
+		cv::resize(img, img, cv::Size(width * rate, height * rate));
+		cv::imwrite(fileName.GetData(), img);
+
+		fHandle = fopen(fileName.GetData(), "rb");
+		fseek(fHandle, 0, SEEK_END);
+		fileSize = ftell(fHandle);
+		fclose(fHandle);
+	}
+
+	if (!success) 
+	{
+		Dbg("Rsize Image failed.");
+		fileutil_copy_file((LPCTSTR)fileName, (LPCTSTR)backUpFile); //recover original img
+		RemoveFileA((LPCTSTR)backUpFile);
+		return FALSE;
+	}
+
+	Dbg("Rsize Image suc.");
+	RemoveFileA((LPCTSTR)backUpFile);
+	return TRUE;
+}
+
 int CHSPScannerFSM::ScanImage(SpReqAnsContext<HSPScannerService_ScanImage_Req, 
 	HSPScannerService_ScanImage_Ans>::Pointer ctx)
 {
@@ -1109,6 +1181,17 @@ int CHSPScannerFSM::ScanImage(SpReqAnsContext<HSPScannerService_ScanImage_Req,
 	}
 	
 	erroCode = m_hDevHelper->ScanImage((LPCTSTR)csImageFile);
+
+	//Copy image to csImageFile for test.
+	//fileutil_copy_file((LPCTSTR)csImageFile, "/home/vtm/Documents/share/compress/jpg/big.jpeg");
+	
+	//Image size limit
+	if (!ResizeImage(csImageFile))
+	{
+		LOG_TRACE("resize(%s) error.", (LPCTSTR)csImageFile);
+	}
+	
+
 	if(ISSUCCEEDED(erroCode))
 	{
 		Dbg("ScanImage suc.");
@@ -1221,9 +1304,18 @@ int CHSPScannerFSM::ScanImageEx(SpReqAnsContext<HSPScannerService_ScanImageEx_Re
 		erroCode = m_hDevHelper->ScanImageEx(pBtImage, len, (LPCTSTR)csImageFile);
 	}
 
+	//Copy image to csImageFile for test.
+	//fileutil_copy_file((LPCTSTR)csImageFile, "/home/vtm/Documents/share/compress/jpg/big.jpeg");
+
+	//Image size limit
+	if (!ResizeImage(csImageFile))
+	{
+		LOG_TRACE("resize(%s) error.", (LPCTSTR)csImageFile);
+	}
+
 	if(ISSUCCEEDED(erroCode))
 	{
-		Dbg("ScanImageEx suc %d, %d.", len, strlen((const char*)pBtImage));
+		Dbg("ScanImageEx suc %d, %d.", len, strlen((const char*)pBtImage));		
 		//TODO:
 		ctx->Ans.filePath = csImageFile;
 		CBlob& cbData = ctx->Ans.imageData;

+ 3 - 1
Module/mod_HSPScanner/HSPScannerFSM.h

@@ -350,7 +350,9 @@ public:
 
 	int StopPreview(SpReqAnsContext<HSPScannerService_CancelPreview_Req,
 		HSPScannerService_CancelPreview_Ans>::Pointer ctx);
-
+	
+	bool ResizeImage(CSimpleStringA fileName);
+	
 	int ScanImage(SpReqAnsContext<HSPScannerService_ScanImage_Req,
 		HSPScannerService_ScanImage_Ans>::Pointer ctx);
 

+ 2 - 0
addin/cfg/HSPSCanner.ini

@@ -0,0 +1,2 @@
+[Img]
+KB=100