从资源中读取image

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 imageSize = ::SizeofResource(hInst, hResource);//资源所占的字节大小
       if (0 == imageSize)
       {
             return FALSE;//资源大小为0,返回FALSE
       }
       //加载资源,锁定资源,得到资源在内存中的首地址
       const void* pResourceData = ::LockResource(::LoadResource(hInst, hResource));
       if (NULL == pResourceData)
       {
             return FALSE;//地址为空,返回FALSE
       }
       HGLOBAL hBuffer   = ::GlobalAlloc(GMEM_MOVEABLE, imageSize);//分配一块大小一样的全局缓存
       if (NULL != hBuffer)//分配全局缓存成功
       {
             void* pBuffer = ::GlobalLock(hBuffer);//锁定刚才分配的全局缓存
             if (NULL != pBuffer)
             {
                   CopyMemory(pBuffer, pResourceData, imageSize);//把资源的内容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;
}

本文出自 “会飞de树(往github迁移中)” 博客,转载请与作者联系!

你可能感兴趣的:(职场,休闲,gdi)