社区
界面
帖子详情
GDI+内存释放
voidsky
2010-01-27 04:26:39
我使用GDI+进行画图,贴图都是在一个函数里面。因为刷新原因要不停的调用该函数。
此时问题出现了,资源管理器里面显示程序占用的内存在不停的增长,我跟到程序里面去看
m_pImageFrame = Image::FromFile(L"Skin\\picture.png");每运行一次类似的语句就会增加内存
在此函数的最后我使用了delete m_pImageFrame;但是内存仍然没有释放。程序占用内存仍然在不停的增长
各位高手帮帮忙,在此谢谢了!
...全文
423
17
打赏
收藏
GDI+内存释放
我使用GDI+进行画图,贴图都是在一个函数里面。因为刷新原因要不停的调用该函数。 此时问题出现了,资源管理器里面显示程序占用的内存在不停的增长,我跟到程序里面去看 m_pImageFrame = Image::FromFile(L"Skin\\picture.png");每运行一次类似的语句就会增加内存 在此函数的最后我使用了delete m_pImageFrame;但是内存仍然没有释放。程序占用内存仍然在不停的增长 各位高手帮帮忙,在此谢谢了!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
booyex
2010-07-21
打赏
举报
回复
鄙视楼主,解决了后就不说解决的方法。
jinjiadong
2010-05-25
打赏
举报
回复
最痛恨这种人,解决了不说怎么解决的
voidsky
2010-01-28
打赏
举报
回复
呵呵,谢谢大家已经解决了
sjdev
2010-01-28
打赏
举报
回复
[Quote=引用楼主 voidsky 的回复:]
m_pImageFrame = Image::FromFile(L"Skin\\picture.png");
[/Quote]
Image::FromFile
This method returns a pointer to the new Image object.
羽毛乱发
2010-01-28
打赏
举报
回复
[Quote=引用 5 楼 ljx0305 的回复:]
这个图片又不是一直被改变不要每次都重新加载一次啊 只要在前边进行一次初始化后一直存在内存当然啊直到不用的时候再delete啊,你这样做很费资源
[/Quote]
赞同这个!
为什么要老是去加载呢,初始化的时候加载一次就可以了,你这么老是加载,浪费时间,浪费效率,
voidsky
2010-01-27
打赏
举报
回复
确定了,上面的释放是成功的
voidsky
2010-01-27
打赏
举报
回复
[Quote=引用 8 楼 dolphin_001 的回复:]
估计楼主是在onpaint里面不停的CreateCompatibleDC和CreateCompatibleBitmap,解决方法有2
1,在onpaint最后参考4楼办法,不可全用上。
2,可在OnInitDialog创建dc,窗口销毁时才释放。避免经常创建和释放,提高效能
[/Quote]
我以前写的程序也是这样的,完全没有影响。这次不知道为什么会出现这样的情况
voidsky
2010-01-27
打赏
举报
回复
[Quote=引用 7 楼 hkf314 的回复:]
引用 4 楼 voidsky 的回复:
delete m_pImageFrame;
delete m_pImageLoad;
delete m_pImageFrameBeafore;
delete m_pImageFrameBack;
delete m_pImagePhoto;
graph.ReleaseHDC(m_hdcMemory);
::ReleaseDC(m_hWnd,hdcScreen);
DeleteDC(hdcScreen);
hdcScreen=NULL;
::ReleaseDC(m_hWnd,hdcTemp);
DeleteDC(hdcTemp);
hdcTemp=NULL;
DeleteObject(hBitMap);
DeleteDC(m_hdcMemory);
m_hdcMemory=NULL;
全部释放了
你的程序你认为释放了,但是你确定释放成功吗?DeleteObject(hBitMap)这句就有可能失败
[/Quote]
额,确实没删除成功,那该怎么删除?
Dolphin_001
2010-01-27
打赏
举报
回复
估计楼主是在onpaint里面不停的CreateCompatibleDC和CreateCompatibleBitmap,解决方法有2
1,在onpaint最后参考4楼办法,不可全用上。
2,可在OnInitDialog创建dc,窗口销毁时才释放。避免经常创建和释放,提高效能
菜鸟二号
2010-01-27
打赏
举报
回复
[Quote=引用 4 楼 voidsky 的回复:]
delete m_pImageFrame;
delete m_pImageLoad;
delete m_pImageFrameBeafore;
delete m_pImageFrameBack;
delete m_pImagePhoto;
graph.ReleaseHDC(m_hdcMemory);
::ReleaseDC(m_hWnd,hdcScreen);
DeleteDC(hdcScreen);
hdcScreen=NULL;
::ReleaseDC(m_hWnd,hdcTemp);
DeleteDC(hdcTemp);
hdcTemp=NULL;
DeleteObject(hBitMap);
DeleteDC(m_hdcMemory);
m_hdcMemory=NULL;
全部释放了
[/Quote]
你的程序你认为释放了,但是你确定释放成功吗?DeleteObject(hBitMap)这句就有可能失败
voidsky
2010-01-27
打赏
举报
回复
自己再顶下,咋没人回答呢
ljx0305
2010-01-27
打赏
举报
回复
这个图片又不是一直被改变不要每次都重新加载一次啊 只要在前边进行一次初始化后一直存在内存当然啊直到不用的时候再delete啊,你这样做很费资源
voidsky
2010-01-27
打赏
举报
回复
delete m_pImageFrame;
delete m_pImageLoad;
delete m_pImageFrameBeafore;
delete m_pImageFrameBack;
delete m_pImagePhoto;
graph.ReleaseHDC(m_hdcMemory);
::ReleaseDC(m_hWnd,hdcScreen);
DeleteDC(hdcScreen);
hdcScreen=NULL;
::ReleaseDC(m_hWnd,hdcTemp);
DeleteDC(hdcTemp);
hdcTemp=NULL;
DeleteObject(hBitMap);
DeleteDC(m_hdcMemory);
m_hdcMemory=NULL;
全部释放了
oyster2008
2010-01-27
打赏
举报
回复
检查下还有没有其他GDI+对象没有释放的,不一定是这个
voidsky
2010-01-27
打赏
举报
回复
[Quote=引用 1 楼 wangk 的回复:]
可能是某些地方你异常跳出了。
建议使用auto_ptr之类的进行管理
[/Quote]
没出现异常
wangk
2010-01-27
打赏
举报
回复
可能是某些地方你异常跳出了。
建议使用auto_ptr之类的进行管理
GDI
内存
泄漏工具查看
内存
泄漏检测工具,可以查看未
释放
的GDI数量和USER对象的数量,方便开发人员
释放
应用程序的资源
MFC设计局域网对战五子棋游戏(源代码)
开发环境采用Visual Studio 2010旗舰版,因为不需要做什么项目,因为我还是学生呵呵,所以不需要考虑太多的兼容性方面的因素,还是喜欢用新的工具。 开发过程中使用到的技术大概有: DWM API:这是vista以来新增的API,具体内容见MSDN,游戏中只使用了部分窗口毛玻璃的效果; GDI混合
GDI+
:因为
GDI+
不支持双缓冲,所以画图时先使用GDI创建缓冲位图,然后使用
GDI+
的Graphics画在这个位图上,最后由GDI绘制到屏幕; CSocket:局域网对战肯定要用到socket通信,因为数据量很少,所以使用了封装好的比较简单的CSocket类,这样可以省不少代码; 多线程和互斥对象:因为CSokcet工作在阻塞模式,所以不能使用主线程接受和发送游戏数据,我把绘制图像的代码也放在一个独立线程中,所以需要使用互斥对象来确保主线程退出时所有子线程以
释放
主线程中的资源,否则会引起
内存
错误; 自绘控件:在游戏中使用默认的控件也太挫了吧,所以就要自己绘制控件,这样才像游戏,虽然市面上有很多,但是拿来的和自己写的用着感觉不一样;
3天掌握Windows
GDI+
图形编程
GDI是Graphics Device Interface的缩写,含义是图形设备接口,它的主要任务是负责系统与绘图程序之间的信息交换,处理所有Windows程序的图形输出。 GDI的出现使程序员无需要关心硬件设备及设备驱动,就可以将应用程序的输出转化为硬件设备上的输出,实现了程序开发者与硬件设备的隔离,大大方便了开发工作。
GDI+
(Graphics Device Interface plus)是以前版本GDI的继承者,出于兼容性考虑,Windows XP仍然支持以前版本的GDI,但是在开发新应用程序的时候,开发人员为了满足图形输出需要应该使用
GDI+
,因为
GDI+
对以前的Windows版本中GDI进行了优化,并添加了许多新功能: 支持渐变的画刷、基数样条函数、持久路径对象、变形矩阵对象、可伸缩区域、混合多种图像格式等 此课程是黄强老师针对
GDI+
的专题课程,由浅入深、搭配课程实战项目,帮助学员对快速熟练的掌握
GDI+
图形图像编程,为C++游戏开发打下坚实的基础!精心打磨、诚意之作,只为让你更轻松的学习!
利用.NET绘图技术制作水晶按钮控件
不可否认的是,Windows编程已经进入.Net时代,虽然现在的编程平台仍然是多家并存,但是微软的.Net框架类库已经全面占据了主流地位。.Net框架为我们提供了非常丰富的类、函数和方法,从桌面到Web它可以触及到编程的任何领域,以至于可以完全放弃Win32 API 的手工调用,因为.Net框架已经为我们准备好了一切。尤其是
GDI+
的发布,Win32程序员都应该非常清楚,在VC6和Delphi5、6、7下要想绘制不规则图形、设计独特样式的窗口控件是件多么不轻松的事情,我们需要返回当前设备指针,然后坐标映射,再调用标准的Win32 GDI函数来进行绘制操作,最后还得记着
释放
设备指针等一系列
内存
清理操作,现在有了.Net类库,我们只需在控件的OnPaint事件中通过e.Graphics返回Graphics对象,然后创建一个自定义的刷子对象Brush来填充Graphics表面,再创建一个Region对象设计好我们需要的控件轮廓,并将其赋给控件的Region属性,在这个过程中可以使用
GDI+
为我们提供的丰富的类和方法来设计美轮美奂的控件外观,这样一个全新的控件就创建完成了
用GDI在vs2008中画流量图
用gdi画图 处理当前的网络流量实时显示 当中有个bug就是没有
释放
内存
界面
15,979
社区成员
115,896
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章