新功能:图片的预加载
This commit is contained in:
		
							parent
							
								
									02dfb9920c
								
							
						
					
					
						commit
						da004f8691
					
				|  | @ -167,6 +167,47 @@ void Image::reset() | |||
| 	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() | ||||
| { | ||||
| 	TString savePath; | ||||
|  | @ -175,7 +216,7 @@ void Image::saveScreenshot() | |||
| 	{ | ||||
| 		// ±£´æ´°¿Ú½ØÍ¼
 | ||||
| 		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); | ||||
| 	} | ||||
| } | ||||
|  | @ -199,38 +240,12 @@ void CrossImage(CImage &img) | |||
| 
 | ||||
| CImage* GetCImage(TString name, bool fromRes) | ||||
| { | ||||
| 	if (s_mCImages.find(name) == s_mCImages.end()) | ||||
| 	if (Image::preload(name.c_str())) | ||||
| 	{ | ||||
| 		CImage* cImage = nullptr; | ||||
| 		// 加载图片
 | ||||
| 		if (fromRes) | ||||
| 		{ | ||||
| 			cImage = new CImage(); | ||||
| 			// 从资源加载图片(不支持 PNG)
 | ||||
| 			cImage->LoadFromResource(GetModuleHandle(NULL), name.c_str()); | ||||
| 		return s_mCImages.at(name); | ||||
| 	} | ||||
| 	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 reset(); | ||||
| 
 | ||||
| 	// Ô¤¼ÓÔØÍ¼Æ¬
 | ||||
| 	static bool preload(LPCTSTR fileName, bool fromRes = false); | ||||
| 	// 保存游戏截图
 | ||||
| 	static void saveScreenshot(); | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue