最近开发项目需要使用GdiPlus+PNG图片的方式,实现窗口半透明效果。在网上DOWN了一些SAMPLE后,发现载入PNG图片后,直接delete掉Gdiplus::Image::FromStream返回的指针不能正确释放内存空间,在CODEPROJECT上找到了解决办法。
使用如下代码,管理载入的PNG图片,简单delete对象指针即可正确释放内存。
using namespace Gdiplus;
class CGdiPlusPng
{
public:
Gdiplus::Image* m_pImage;
public:
CGdiPlusPng()
{
m_pImage = NULL;
}
CGdiPlusPng(LPCWSTR pFile)
{
m_pImage = NULL;
Load(pFile);
}
virtual ~CGdiPlusPng()
{
Empty();
}
void Empty()
{
delete m_pImage;
m_pImage = NULL;
}
bool Load(LPCWSTR pFile)
{
Empty();
m_pImage = Gdiplus::Bitmap::FromFile(pFile);
return m_pImage->GetLastStatus() == Gdiplus::Ok;
}
operator Gdiplus::Image * () const
{
return m_pImage;
}
Gdiplus::Image *GetPngImage() const
{
return m_pImage;
}
};
class CGdiPlusPngResource : public CGdiPlusPng
{
protected:
HGLOBAL m_hBuffer