瀏覽代碼

修改部分函数,将有保存图片的函数去文件化。

Jeff 2 年之前
父節點
當前提交
aeb2451155
共有 3 個文件被更改,包括 35 次插入11 次删除
  1. 1 2
      GameAssist/GameAssist/CAction.cpp
  2. 32 9
      GameAssist/GameAssist/ImgAssist.cpp
  3. 2 0
      GameAssist/GameAssist/ImgAssist.h

+ 1 - 2
GameAssist/GameAssist/CAction.cpp

@@ -247,9 +247,8 @@ SRAND(80,120);
 		TCHAR szTemplateImage[MAX_PATH] = { 0 };
 		// 先截图;
 		GameGlobal::DebugLog(_T("FindMatchIcon=%s"), lpszTemplateImage);
-		ImgAssist::CaptureGameWnd(m_hGameWnd); SRAND(200, 500);
 		_stprintf_s(szTemplateImage, _T("%s%s"), GameGlobal::g_strAppdir.c_str(), lpszTemplateImage);
-		if (ImgAssist::GetImgMatchtemplate(GameGlobal::BuildImgPath(m_hGameWnd), szTemplateImage, rc)) {
+		if (ImgAssist::GetImgMatchtemplate(m_hGameWnd, szTemplateImage, rc)) {
 			// 找到匹配的模块;
 			GameGlobal::DebugLog(_T("====> 找到匹配目标:%s"), lpszTemplateImage);
 			return rc;

+ 32 - 9
GameAssist/GameAssist/ImgAssist.cpp

@@ -241,6 +241,18 @@ namespace ImgAssist
 		return TRUE;
 	}
 
+	cv::Mat OpenImage(std::string strImage)
+	{
+		if (!PathFileExists(strImage.c_str()))
+			return cv::Mat();
+
+		cv::Mat img = cv::imread(strImage.c_str(), cv::IMREAD_COLOR);
+		if (img.data == NULL)
+			return cv::Mat();
+
+		return cv::Mat();
+	}
+
 	BOOL SetImgThreshold(cv::Mat& srcImg, cv::Mat& thresholdImg, long nThresholdVal, long nMaxThresholdVal, int type)
 	{
 		if (srcImg.data == NULL)
@@ -290,9 +302,8 @@ namespace ImgAssist
 
 	BOOL GetImgMatchtemplate(HWND hWnd, std::string strTempImg, RECT& rc, double lowestMatchValue)
 	{
-		std::string strImage = CaptureGameWnd(hWnd);
-		cv::Mat srcImg, tempImg, matchImg;
-		if (!OpenImage(strImage, srcImg) || !OpenImage(strTempImg, tempImg))
+		cv::Mat srcImg = CaptureWnd(hWnd), tempImg, matchImg;
+		if (srcImg.empty() || !OpenImage(strTempImg, tempImg))
 		{
 			if (srcImg.data) srcImg.release();
 			if (tempImg.data) tempImg.release();
@@ -369,9 +380,8 @@ namespace ImgAssist
 
 	BOOL IsMatchIcon(HWND hWnd, std::string strTempImg, RECT srcRect, RECT& matchRect, double lowestMatchValue)
 	{
-		std::string strImg = CaptureGameWnd(hWnd);
-		cv::Mat srcImg, tempImg, matchImg;
-		if (!OpenImage(strImg, srcImg) || !OpenImage(strTempImg, tempImg))
+		cv::Mat srcImg = CaptureWnd(hWnd), tempImg, matchImg;
+		if (srcImg.empty() || !OpenImage(strTempImg, tempImg))
 		{
 			if (srcImg.data) srcImg.release();
 			if (tempImg.data) tempImg.release();
@@ -421,9 +431,8 @@ namespace ImgAssist
 
 	BOOL CropPicture(HWND hWnd, CRect rc, const char* szSaveName)
 	{
-		std::string strImg = CaptureGameWnd(hWnd);
-		cv::Mat srcImg, tempImg, matchImg;
-		if (!OpenImage(strImg, srcImg))
+		cv::Mat srcImg = CaptureWnd(hWnd), tempImg, matchImg;
+		if (srcImg.empty())
 		{
 			if (srcImg.data) srcImg.release();
 			return FALSE;
@@ -435,6 +444,20 @@ namespace ImgAssist
 		return cv::imwrite(szSaveName, imgROI);
 	}
 
+	cv::Mat CropPicture(HWND hWnd, CRect rc)
+	{
+		cv::Mat srcImg = CaptureWnd(hWnd), tempImg, matchImg;
+		if (srcImg.empty())
+		{
+			if (srcImg.data) srcImg.release();
+			return cv::Mat();
+		}
+
+		// 指定源图片区域来做模块比较,提高效率;
+		cv::Mat imgROI;
+		return srcImg(cv::Rect(rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top));
+	}
+
 	BOOL IsSimilarPicture(const char* szp1, const char* szp2, double lowestMatchValue)
 	{
 		cv::Mat src, dest, matchImg;

+ 2 - 0
GameAssist/GameAssist/ImgAssist.h

@@ -6,11 +6,13 @@ namespace ImgAssist
 	void CaptureGameWnd(HWND hWnd, std::string strSavePath);
 	cv::Mat CaptureWnd(HWND hWnd);
 	BOOL OpenImage(std::string strImag, cv::Mat& img);
+	cv::Mat OpenImage(std::string strImage);
 	BOOL SetImgThreshold(cv::Mat& srcImg, cv::Mat& thresholdImg, long nThresholdVal, long nMaxThresholdVal, int type = 0);
 	BOOL GetImgMatchtemplate(HWND hWnd, std::string strTempImg, RECT& rc, double lowestMatchValue = 0.900);
 	BOOL GetImgMatchtemplate(std::string strSrcImg, std::string strTempImg, RECT& rc, double lowestMatchValue = 0.900);
 	BOOL IsMatchIcon(HWND hWnd, std::string strTempImg, RECT srcRect, RECT& matchRect, double lowestMatchValue = 0.900);
 	BOOL CropPicture(HWND hWnd, CRect rc, const char* szSaveName); // 剪裁图片;
+	cv::Mat CropPicture(HWND hWnd, CRect rc);
 	BOOL IsSimilarPicture(const char* szp1, const char* szp2, double lowestMatchValue = 0.99);
 	// 获取指定颜色占用矩形长度比例;
 	int GetColorOccupiedLength(std::string strImg, int r, int g, int b);