因此,当我尝试将HBITMAP用于我要显示的png图像时,我试图学习一些GDI基础知识和代码中断...
HBITMAP SplashScreen::LoadPng(WCHAR* path)
{
HBITMAP bmp;
fstream f;
f.open(path);
if(!f.good())
{
throw std::exception("Can't find/read file.");
}
f.close();
Gdiplus::Bitmap* img = Gdiplus::Bitmap::FromFile(path, FALSE);
Gdiplus::Color bg(0,0,0,0);
img->GetHBITMAP(bg, &bmp); // <--- Breaks here! Memory access exception!
return bmp;
}
代码已经很简单了,我想不出有什么问题,除非我之前没有设置过什么东西?
思想?
答案 0 :(得分:0)
不确定您的问题是什么,但我确实注意到您有内存泄漏。
img
永远不会delete
d - 您应该在致电GetHBITMAP后致电delete img;
我在快速测试项目中使用以下(不太全面的代码)。
// BMP, GIF, JPEG, PNG, TIFF, Exif, WMF, and EMF
HBITMAP mLoadImg(WCHAR *szFilename)
{
HBITMAP result=NULL;
Gdiplus::Bitmap* bitmap = new Gdiplus::Bitmap(szFilename,false);
bitmap->GetHBITMAP(0, &result);
delete bitmap;
return result;
}
答案 1 :(得分:0)
我没有正确初始化GDI。修复我的初始化代码后,它工作正常。这很烦人。现在我知道了。