DrawImage导致内存疯长,求解决方法
各位兄台:
求助!!本人开发一个程序,需要用到ImageDraw显示,但遇到问题,当连续显示多付图像的时候,会出现内存疯狂增加的情况,自己琢磨很久也不得其解,请帮助一下,非常感谢!代码如下:
CRect rect;
pictureConIDCam1-> GetClientRect(rect);
CDC *pDC = pictureConIDCam1-> GetDC( );
CBitmap bitmap;
bitmap.CreateCompatibleBitmap( pDC, rect.Width( ), rect.Height( ) ); //创建内存位图时只需要和显示窗体客户区大小相同,创建的大了也是没用的!!!。
CDC memDC;
memDC.CreateCompatibleDC( pDC );
CBitmap *pOld = memDC.SelectObject( &bitmap );
memDC.SetStretchBltMode( COLORONCOLOR );
Graphics graphics( memDC );
graphics.SetInterpolationMode(InterpolationModeLowQuality);
HGLOBAL hGloabl = GlobalAlloc(GMEM_MOVEABLE,ImageBufferStructCam-> lengthall);
if (hGloabl == NULL)
{
return 0;
}
void *pData = GlobalLock(hGloabl);
memcpy(pData,ImageBufferStructCam-> bufImageAll,ImageBufferStructCam-> lengthall); //ImageBufferStructCam是我定义的结构体,返回图像的长度及内存地址;
IStream* pStream = NULL;
if (CreateStreamOnHGlobal(hGloabl,true, &pStream) != S_OK)
{
GlobalFree(hGloabl);
delete ImageBufferStructCam-> bufImageAll;
delete ImageBufferStructCam;
return 0;
}
if (pStream == NULL)
{
GlobalFree(hGloabl);
delete ImageBufferStructCam-> bufImageAll;
delete ImageBufferStructCam;
return 0;
}
Image image( pStream );
graphics.DrawImage( &image, 0, 0, rect.Width( ), rect.Height( ) ); //图像缩放到窗体大小
pDC-> BitBlt( 0, 0, rect.right, rect.bottom, &memDC, 0, 0, SRCCOPY );
//由于搞不清楚哪些资源没有被释放,我把能想到的全加上了,但依然内存泄露厉害。
memDC.SelectObject(pOld);
bitmap.DeleteObject();
memDC.DeleteDC();
graphics.Clear(0);//
GlobalUnlock(hGloabl);
GlobalFree(hGloabl);
// graphics.~Graphics();
// Graphics.ReleaseHDC()
delete ImageBufferStructCam-> bufImageAll;
delete ImageBufferStructCam;
return 0;
说明:由于要连续显示很多图像(30帧/s),使得图像像录像一样显示出来,因而上述代码会反复执行。我追踪了一下,发现出现内存泄露的地方集中在graphics.DrawImage( &image, 0, 0, rect.Width( ), rect.Height( ) ); 这条语句,前面的代码与后面的都不会出现该泄露。不知道怎么回事,怎么释放了!怀疑windows 7释放内存速度太慢,系统反应不过来,但又苦于找不到vc下的内存强制释放代码!!!请帮助。非常感谢