Gdiplus::Bitmap * CPaiPaiHelper::GetBitmapFromRescourse(UINT id, LPCTSTR pType, HMODULE hInst)
{
Gdiplus::Bitmap *pBitmap;
LPCTSTR pName = MAKEINTRESOURCE(id);
HRSRC hResource = ::FindResource(hInst, pName, pType);//从指定模块寻找指定资源
if (NULL == hResource)
{
return FALSE;//找不到资源,返回FALSE
}
DWORD p_w_picpathSize = ::SizeofResource(hInst, hResource);//资源所占的字节大小
if (0 == p_w_picpathSize)
{
return FALSE;//资源大小为0,返回FALSE
}
//加载资源,锁定资源,得到资源在内存中的首地址
const void* pResourceData = ::LockResource(::LoadResource(hInst, hResource));
if (NULL == pResourceData)
{
return FALSE;//地址为空,返回FALSE
}
HGLOBAL hBuffer = ::GlobalAlloc(GMEM_MOVEABLE, p_w_picpathSize);//分配一块大小一样的全局缓存
if (NULL != hBuffer)//分配全局缓存成功
{
void* pBuffer = ::GlobalLock(hBuffer);//锁定刚才分配的全局缓存
if (NULL != pBuffer)
{
CopyMemory(pBuffer, pResourceData, p_w_picpathSize);//把资源的内容copy到全局缓存中
IStream* pStream = NULL;
if (S_OK == ::CreateStreamOnHGlobal(hBuffer, FALSE, &pStream) && NULL != pStream)//创建流Stream
{
pBitmap =new Gdiplus::Bitmap(pStream);//从流Stream创建位图
pStream->Release();//释放流Stream
if (NULL == pBitmap)
{
delete pBitmap;
}
}
::GlobalUnlock(hBuffer);//解锁全局缓存
}
::GlobalFree(hBuffer);
hBuffer = NULL;
}
return pBitmap;
}
转载于:https://blog.51cto.com/wellwy/492010