新功能:图片的预加载

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;
}
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());
}
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);
}
else
{
return nullptr;
}
return s_mCImages.at(name);
}

View File

@ -688,6 +688,9 @@ public:
void setTransparentColor(COLORREF value);
// 重置图片属性
void reset();
// Ô¤¼ÓÔØÍ¼Æ¬
static bool preload(LPCTSTR fileName, bool fromRes = false);
// 保存游戏截图
static void saveScreenshot();