新功能:图片的预加载
This commit is contained in:
		
							parent
							
								
									02dfb9920c
								
							
						
					
					
						commit
						da004f8691
					
				|  | @ -167,6 +167,47 @@ void Image::reset() | ||||||
| 	m_nAlpha = 255; | 	m_nAlpha = 255; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | bool Image::preload(LPCTSTR fileName, bool fromRes) | ||||||
|  | { | ||||||
|  | 	// 判断图片是否已经加载
 | ||||||
|  | 	if (s_mCImages.find(fileName) != s_mCImages.end()) | ||||||
|  | 	{ | ||||||
|  | 		return true; | ||||||
|  | 	} | ||||||
|  | 	// 加载图片
 | ||||||
|  | 	CImage* cImage = nullptr; | ||||||
|  | 	if (fromRes) | ||||||
|  | 	{ | ||||||
|  | 		cImage = new CImage(); | ||||||
|  | 		// 从资源加载图片(不支持 PNG)
 | ||||||
|  | 		cImage->LoadFromResource(GetModuleHandle(NULL), fileName); | ||||||
|  | 	} | ||||||
|  | 	else | ||||||
|  | 	{ | ||||||
|  | 		//判断图片路径是否存在
 | ||||||
|  | 		if (!PathFileExists(fileName)) | ||||||
|  | 		{ | ||||||
|  | 			return false; | ||||||
|  | 		} | ||||||
|  | 		cImage = new CImage(); | ||||||
|  | 		cImage->Load(fileName); | ||||||
|  | 	} | ||||||
|  | 	// 加载失败
 | ||||||
|  | 	if (!cImage || cImage->IsNull()) | ||||||
|  | 	{ | ||||||
|  | 		return false; | ||||||
|  | 	} | ||||||
|  | 	// 确认该图像包含 Alpha 通道
 | ||||||
|  | 	if (cImage->GetBPP() == 32) | ||||||
|  | 	{ | ||||||
|  | 		// 透明图片处理
 | ||||||
|  | 		CrossImage(*cImage); | ||||||
|  | 	} | ||||||
|  | 	s_mCImages.insert(map<TString, CImage*>::value_type(fileName, cImage)); | ||||||
|  | 
 | ||||||
|  | 	return true; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void Image::saveScreenshot() | void Image::saveScreenshot() | ||||||
| { | { | ||||||
| 	TString savePath; | 	TString savePath; | ||||||
|  | @ -175,7 +216,7 @@ void Image::saveScreenshot() | ||||||
| 	{ | 	{ | ||||||
| 		// ±£´æ´°¿Ú½ØÍ¼
 | 		// ±£´æ´°¿Ú½ØÍ¼
 | ||||||
| 		IMAGE image; | 		IMAGE image; | ||||||
| 		getimage(&image, 0, 0, App::get()->getWidth(), App::get()->getHeight()); | 		getimage(&image, 0, 0, App::getWidth(), App::getHeight()); | ||||||
| 		saveimage(savePath.c_str(), &image); | 		saveimage(savePath.c_str(), &image); | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  | @ -199,38 +240,12 @@ void CrossImage(CImage &img) | ||||||
| 
 | 
 | ||||||
| CImage* GetCImage(TString name, bool fromRes) | CImage* GetCImage(TString name, bool fromRes) | ||||||
| { | { | ||||||
| 	if (s_mCImages.find(name) == s_mCImages.end()) | 	if (Image::preload(name.c_str())) | ||||||
| 	{ | 	{ | ||||||
| 		CImage* cImage = nullptr; | 		return s_mCImages.at(name); | ||||||
| 		// 加载图片
 | 	} | ||||||
| 		if (fromRes) | 	else | ||||||
| 		{ | 	{ | ||||||
| 			cImage = new CImage(); | 		return nullptr; | ||||||
| 			// 从资源加载图片(不支持 PNG)
 |  | ||||||
| 			cImage->LoadFromResource(GetModuleHandle(NULL), name.c_str()); |  | ||||||
| 		} |  | ||||||
| 		else |  | ||||||
| 		{ |  | ||||||
| 			//判断图片路径是否存在
 |  | ||||||
| 			if (!PathFileExists(name.c_str())) |  | ||||||
| 			{ |  | ||||||
| 				return nullptr; |  | ||||||
| 			} |  | ||||||
| 			cImage = new CImage(); |  | ||||||
| 			cImage->Load(name.c_str()); |  | ||||||
| 		} |  | ||||||
| 		// 加载失败
 |  | ||||||
| 		if (!cImage || cImage->IsNull()) |  | ||||||
| 		{ |  | ||||||
| 			return nullptr; |  | ||||||
| 		} |  | ||||||
| 		// 确认该图像包含 Alpha 通道
 |  | ||||||
| 		if (cImage->GetBPP() == 32) |  | ||||||
| 		{ |  | ||||||
| 			// 透明图片处理
 |  | ||||||
| 			CrossImage(*cImage); |  | ||||||
| 		} |  | ||||||
| 		s_mCImages.insert(map<TString, CImage*>::value_type(name, cImage)); |  | ||||||
| 	} | 	} | ||||||
| 	return s_mCImages.at(name); |  | ||||||
| } | } | ||||||
|  | @ -688,6 +688,9 @@ public: | ||||||
| 	void setTransparentColor(COLORREF value); | 	void setTransparentColor(COLORREF value); | ||||||
| 	// 重置图片属性
 | 	// 重置图片属性
 | ||||||
| 	void reset(); | 	void reset(); | ||||||
|  | 
 | ||||||
|  | 	// Ô¤¼ÓÔØÍ¼Æ¬
 | ||||||
|  | 	static bool preload(LPCTSTR fileName, bool fromRes = false); | ||||||
| 	// 保存游戏截图
 | 	// 保存游戏截图
 | ||||||
| 	static void saveScreenshot(); | 	static void saveScreenshot(); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue