您的位置:首页 > 其它

GDI+ Image通过资源ID构建对象

2009-11-23 16:13 483 查看
BOOL CSmalltmpdemoDlg::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;
}


 

调用方式:

 

Image
* pImage = NULL;

ImageFromIDResource(IDR_PNG_NO_PIC, L"png", pImage);

delete
pImage;

/////////////////////////////////////////////////////////////////////////

 

Image
* pImage = NULL;

ImageFromIDResource(IDR_PNG_NO_PIC, L"jpg", pImage);

delete
pImage;

//////////////////////////////////////////////////////////////////////////

 

Image
* pImage = NULL;

ImageFromIDResource(IDR_PNG_NO_PIC, L"bitmap", pImage);

delete
pImage;

//////////////////////////////////////////////////////////////////////////

其中的 L"png", L"jpg", L"bitmap"为导入到vc资源的类别,并且不区分大小写。

 

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  image gdi+ delete byte stream