GDI + GetHBITMAP内存错误?

时间:2013-11-18 04:28:09

标签: c++ windows gdi+

因此,当我尝试将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;
}

代码已经很简单了,我想不出有什么问题,除非我之前没有设置过什么东西?

思想?

2 个答案:

答案 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。修复我的初始化代码后,它工作正常。这很烦人。现在我知道了。