函数定义:
BOOL ImageFromIDResource(UINT nID, LPCTSTR sTR, Image * & pImg)
{
HINSTANCE hInst = AfxGetResourceHandle();
HRSRC hRsrc = ::FindResource (hInst,MAKEINTRESOURCE(nID),sTR); // type
if (!hRsrc)
return FALSE;
// load resource into memory
DWORD len = SizeofResource(hInst, hRsrc);
BYTE* lpRsrc = (BYTE*)LoadResource(hInst, hRsrc);
if (!lpRsrc)
return FALSE;
// Allocate global memory on which to create stream
HGLOBAL m_hMem = GlobalAlloc(GMEM_FIXED, len);
BYTE* pmem = (BYTE*)GlobalLock(m_hMem);
memcpy(pmem,lpRsrc,len);
IStream* pstm;
CreateStreamOnHGlobal(m_hMem,FALSE,&pstm);
// load from stream
pImg=Gdiplus::Image::FromStream(pstm);
// free/release stuff
GlobalUnlock(m_hMem);
pstm->Release();
FreeResource(lpRsrc);
return TRUE;
}
调用函数:
ImageFromIDResource(IDR_BMP1, "bmp",(Image*&)img);
其中IDR_BMP1为自定义资源的ID,bmp为自定义资源类型
然后就可以调用GDI+绘图了:
Graphics g(hdc);
g.DrawImage(img,0,0,0,0,48,48,UnitPixel);
最后要释放资源:
delete img;
默认Bitmap(RT_BITMAP)类型的图片无法加载, RT_BITMAP是预定义类型, 资源里面没有bmp文件的头,
SizeofResource 的返回值要比图片文件
少几个字节,因为少了这几个字节, 所以GDI+会返回invalid parameter错误。