为什么LockBits给bitmapdata结构scan0分配的内存在unlockbits后不会自动释放。

阿拉丁丁 2014-04-07 10:02:32
pDst->LockBits(&rect, ImageLockModeRead, PixelFormat24bppRGB, &bmpData);
BYTE* temp = (bmpData.Stride>0)?((BYTE*)bmpData.Scan0):((BYTE*)bmpData.Scan0+bmpData.Stride*(bmpData.Height-1));
pDst->UnlockBits(&bmpData);

为什么LockBits给bitmapdata结构scan0分配的内存在unlockbits后不会自动释放。

这不算内存泄露吗?
...全文
570 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lowerbyte 2014-12-18
  • 打赏
  • 举报
回复 1
楼上说的很清楚pDst对象构造时分配了内存, 要想释放就释放pDst. m_pTCBitmap = new Bitmap(m_nBmpWidth, m_nBmpHeight, PixelFormat32bppARGB); m_pGraphics = Graphics::FromImage(m_pTCBitmap); Rect rc(0, 0, m_nBmpWidth, m_nBmpHeight); BitmapData sBmpData; m_pTCBitmap->LockBits(&rc, ImageLockModeRead, PixelFormat32bppARGB, &sBmpData); ZeroMemory(sBmpData.Scan0, sBmpData.Stride * sBmpData.Height); m_pTCBitmap->UnlockBits(&sBmpData); SafeDeleteObject(m_pTCBitmap); SafeDeleteObject(m_pGraphics);
阿拉丁丁 2014-04-07
  • 打赏
  • 举报
回复
引用 1 楼 laviewpbt 的回复:
这个说明pDst在内存中本省的格式就是PixelFormat24bppRGB的,你调用了LockBits只是让你获得了他分配好的内存的指针而已。
那请问要怎么样才能得于释放呢? 因为我程序中是一个for循环,要大量加载PNG图片锁定再处理,这样不释放太占用内存了。
laviewpbt 2014-04-07
  • 打赏
  • 举报
回复
这个说明pDst在内存中本省的格式就是PixelFormat24bppRGB的,你调用了LockBits只是让你获得了他分配好的内存的指针而已。

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧