From da004f8691edd8338eb18485cdae481a5bb4a148 Mon Sep 17 00:00:00 2001 From: Nomango <569629550@qq.com> Date: Thu, 5 Oct 2017 13:56:00 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=8A=9F=E8=83=BD=EF=BC=9A=E5=9B=BE?= =?UTF-8?q?=E7=89=87=E7=9A=84=E9=A2=84=E5=8A=A0=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Easy2D/Object/Image.cpp | 81 ++++++++++++++++++++++++----------------- Easy2D/easy2d.h | 3 ++ 2 files changed, 51 insertions(+), 33 deletions(-) diff --git a/Easy2D/Object/Image.cpp b/Easy2D/Object/Image.cpp index b4612005..fd7409ec 100644 --- a/Easy2D/Object/Image.cpp +++ b/Easy2D/Object/Image.cpp @@ -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::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::value_type(name, cImage)); + return s_mCImages.at(name); + } + else + { + return nullptr; } - return s_mCImages.at(name); } \ No newline at end of file diff --git a/Easy2D/easy2d.h b/Easy2D/easy2d.h index baefba3f..73eb2277 100644 --- a/Easy2D/easy2d.h +++ b/Easy2D/easy2d.h @@ -688,6 +688,9 @@ public: void setTransparentColor(COLORREF value); // 重置图片属性 void reset(); + + // 预加载图片 + static bool preload(LPCTSTR fileName, bool fromRes = false); // 保存游戏截图 static void saveScreenshot();