wince 5.0 使用 imaging COM组件 画png图片 内存泄露
[复制链接]
BOOL ImageFromIDResource(UINT nID, LPCTSTR sTR, IImage** pIImage)
{
HRSRC hRsrc = ::FindResource (hInstRes,MAKEINTRESOURCE(nID),sTR); // type
if (!hRsrc)
return FALSE;
//加载资源进入内存
DWORD len = SizeofResource(hInstRes, hRsrc);
BYTE* lpRsrc = (BYTE*)LoadResource(hInstRes, hRsrc);
if (!lpRsrc)
return FALSE;
//申请全局内存,目的是在其上创建 流
HGLOBAL m_hMem = GlobalAlloc(GMEM_FIXED, len);
BYTE* pmem = (BYTE*)GlobalLock(m_hMem);
memcpy(pmem,lpRsrc,len);
IStream* pStream;
CreateStreamOnHGlobal(m_hMem,FALSE,&pStream);
//从流数据中加载
pIImgFactory->CreateImageFromStream(pStream, pIImage);
// 释放资源
GlobalUnlock(m_hMem);
GlobalFree(m_hMem);
if(pStream!=NULL)
{
pStream->Release();
pStream = NULL;
}
// FreeResource(lpRsrc);//查看下内存的情况
delete pmem;
pmem =NULL;
if(!pIImage)
return FALSE;
return TRUE;
}
void DrawXXImage(HDC hdestdc, int x, int y, LPCTSTR sTR, int nImageIn )
{
ImageInfo xximage;
IImage* pImageIn = NULL; //清空操作
CoInitializeEx(NULL,COINIT_MULTITHREADED);//初始化com
if(!SUCCEEDED(CoCreateInstance(CLSID_ImagingFactory,NULL,CLSCTX_INPROC_SERVER,IID_IImagingFactory,(void **)&pIImgFactory)))
{
return ;
}
ImageFromIDResource(nImageIn, sTR, &pImageIn);
pImageIn->GetImageInfo(&xximage);
UINT reswide=xximage.Width;
UINT resheight=xximage.Height;
RECT rc={x,y,x+reswide,y+resheight};
pImageIn->Draw(hdestdc,&rc,NULL);
// delete pImageIn;
// pImageIn=NULL;
pImageIn->Release();
pImageIn=NULL;
if(pIImgFactory!=NULL)
{
pIImgFactory->Release();
pIImgFactory=NULL;
}
CoUninitialize();
}
当我多次DrawXXImage时发生明显的内存泄露,敬请高手指点