当前位置: 代码迷 >> VC >> 加载RT_BITMAP时出错,高手来看看,什么有关问题
  详细解决方案

加载RT_BITMAP时出错,高手来看看,什么有关问题

热度:10156   发布时间:2013-02-25 00:00:00.0
加载RT_BITMAP时出错,高手来看看,什么问题?
BOOL CMy****Dlg::LoadResImage(UINT nResID,LPCTSTR ResType,Image * &image)
{
HINSTANCE hIns=AfxGetInstanceHandle();
HRSRC hRsrc = ::FindResource (hIns,MAKEINTRESOURCE(nResID),ResType); // 查找指定类型的资源,不支持RT_BITMAP格式
if (!hRsrc) 
return FALSE; 
// load resource into memory 
DWORD len = SizeofResource(hIns, hRsrc); 
BYTE* lpRsrc = (BYTE*)LoadResource(hIns, hRsrc); //将资源加入内存
if (!lpRsrc) 
{
FreeResource(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; 

HRESULT hRes=CreateStreamOnHGlobal(m_hMem,FALSE,&pstm); 
if (hRes!=S_OK)
{
GlobalUnlock(m_hMem); //锁计数减一
FreeResource(lpRsrc);//释放资源句柄
return FALSE; 
}
// load from stream 
image=Gdiplus::Image::FromStream(pstm); //将流对象中的数据读入Image对象
//m_image=new Image(pstm,FALSE);
//if(image->GetLastStatus())
//lpImage->FromStream(pstm);
// free/release stuff 

pstm->Release(); //手动释放流对象
GlobalUnlock(m_hMem); //锁计数减一
FreeResource(lpRsrc);//释放资源句柄
return TRUE;
}
不知道为什么用这个函数加载RT_BITMAP格式的图片时,image里的nativeimage就会为NULL,status=invalidparam;加载其它格式的就行,我是用VS2008来调的
------解决方案--------------------------------------------------------
该回复于2012-05-08 12:19:55被版主删除
------解决方案--------------------------------------------------------
该回复于2012-05-09 21:05:53被版主删除
------解决方案--------------------------------------------------------
没人顶怎么结贴啊
  相关解决方案