如何回收显示位图后的内存?

icebergly 2005-10-13 05:05:20
这个是我显示位图的函数:
HDC memDC;
HDC hDC = hWnd->GetDC()->m_hDC;
BITMAP bm;
RECT rect;
hWnd->GetClientRect(&rect);
int bmSize = ::GlobalSize(hbitmap);
hbitmap = (HANDLE)::LoadImage(NULL,
m_filePath,
IMAGE_BITMAP,
0,
0,
LR_LOADFROMFILE|LR_CREATEDIBSECTION);
GetObject(hbitmap,sizeof BITMAP,&bm);
memDC = CreateCompatibleDC(hDC);
::SetStretchBltMode(hDC,COLORONCOLOR);
SelectObject(memDC,hbitmap);
::StretchBlt(hDC, rect.left, rect.top, rect.right, rect.bottom, memDC,
0, 0, bm.bmWidth, bm.bmHeight,+SRCCOPY);
DeleteObject(hbitmap);
DeleteObject(&bm);
请问怎么回收我分配的内存?
...全文
90 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
thisisll 2005-10-14
  • 打赏
  • 举报
回复
get的要release
create的要delete
菜牛 2005-10-13
  • 打赏
  • 举报
回复
对于这句:
hWnd->GetDC()
深感不解。

要注意命名规范,否则容易造成误解。
菜牛 2005-10-13
  • 打赏
  • 举报
回复
还有一句:
DeleteDC(memDC);
加到后面。
菜牛 2005-10-13
  • 打赏
  • 举报
回复
HBITMAP hOldBmp = (HBITMAP)SelectObject(memDC,hbitmap);
::StretchBlt(hDC, rect.left, rect.top, rect.right, rect.bottom, memDC,
0, 0, bm.bmWidth, bm.bmHeight,+SRCCOPY);
SelectObject(hOldBmp);
DeleteObject(hbitmap);

这句是错误的吧:DeleteObject(&bm);BITMAP又不是系统资源,只是一个结构。

19,468

社区成员

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

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