新功能:图片的预加载

This commit is contained in:
Nomango 2017-10-05 13:56:00 +08:00
parent 02dfb9920c
commit da004f8691
2 changed files with 51 additions and 33 deletions

View File

@ -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);
} }

View File

@ -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();