修复图片缓存的访问错误

This commit is contained in:
Nomango 2017-10-02 08:41:40 +08:00
parent b825e17c6c
commit a32e3431a6
1 changed files with 11 additions and 9 deletions

View File

@ -4,7 +4,7 @@
using namespace std; using namespace std;
// 图片缓存 // 图片缓存
static map<tstring, CImage> s_mCImages; static map<tstring, CImage*> s_mCImages;
// 从图片缓存中读取图片 // 从图片缓存中读取图片
static CImage* GetCImage(tstring name, bool fromRes = false); static CImage* GetCImage(tstring name, bool fromRes = false);
// 对 PNG 图像进行像素转换 // 对 PNG 图像进行像素转换
@ -201,12 +201,13 @@ CImage* GetCImage(tstring name, bool fromRes)
{ {
if (s_mCImages.find(name) == s_mCImages.end()) if (s_mCImages.find(name) == s_mCImages.end())
{ {
CImage cImage; CImage* cImage = nullptr;
// 加载图片 // 加载图片
if (fromRes) if (fromRes)
{ {
cImage = new CImage();
// 从资源加载图片(不支持 PNG // 从资源加载图片(不支持 PNG
cImage.LoadFromResource(GetModuleHandle(NULL), name.c_str()); cImage->LoadFromResource(GetModuleHandle(NULL), name.c_str());
} }
else else
{ {
@ -215,20 +216,21 @@ CImage* GetCImage(tstring name, bool fromRes)
{ {
return nullptr; return nullptr;
} }
cImage.Load(name.c_str()); cImage = new CImage();
cImage->Load(name.c_str());
} }
// 加载失败 // 加载失败
if (cImage.IsNull()) if (!cImage || cImage->IsNull())
{ {
return nullptr; return nullptr;
} }
// 确认该图像包含 Alpha 通道 // 确认该图像包含 Alpha 通道
if (cImage.GetBPP() == 32) if (cImage->GetBPP() == 32)
{ {
// 透明图片处理 // 透明图片处理
CrossImage(cImage); CrossImage(*cImage);
} }
s_mCImages.insert(map<tstring, CImage>::value_type(name, cImage)); s_mCImages.insert(map<tstring, CImage*>::value_type(name, cImage));
} }
return &s_mCImages.at(name); return s_mCImages.at(name);
} }