DirectDraw画1920*1080位图,内存资源急剧耗尽,程序崩溃。

webing520 2012-06-28 09:43:56
最近在使用directdraw来画高清格式的大图片,由于之前没有用过directdraw,所以对其用法也不甚了解。根据directdraw流程来画图。初始化,创建directdraw对象,设定控制级,创建主表面,创建离屏表面,GetDC()得到DC,然后将pData数据拷贝到离屏DC上,完了之后就ReleaseDC()释放离屏DC,将离屏图案blt到主表面,最后释放所有对象和表面。
可能是内存占用比较多,在线程中调用该绘制函数,几秒钟以后内存就急剧增加,直至崩溃。查看后也没有怎么发现内存泄露,使用的是内存池。
网络上说可能是DC没有释放,可是我已经ReleaseDC了。离屏表面的返回值也是正确的,说明释放完毕。
现在一直没有好的办法,如果有经历过directdraw的朋友,可以告诉我该怎么搞,先谢了。
...全文
432 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
y843222361 2013-01-23
  • 打赏
  • 举报
回复
请问你怎么解决的,我也是遇到这问题,我的是lock 和unlock问题。
computer7607 2013-01-22
  • 打赏
  • 举报
回复
你的离屏DC是用GetDC得的DC作为参数创建的吧?离屏DC的释放要用DeleteDC,ReleaseDC不行。 大哥,你试过没有呀,有DeleteDC吗?
webing520 2012-07-04
  • 打赏
  • 举报
回复
多谢各位,揭帖
zhanshen2891 2012-07-01
  • 打赏
  • 举报
回复
调试一下,看看是在执行什么函数的时候内存急剧增加的
开水 2012-07-01
  • 打赏
  • 举报
回复
你的离屏DC是用GetDC得的DC作为参数创建的吧?离屏DC的释放要用DeleteDC,ReleaseDC不行。
fronz 2012-06-30
  • 打赏
  • 举报
回复
唉,绘图程序从来就很难调,还是注释掉一段一段排除吧,从简单架构一点点增加
webing520 2012-06-29
  • 打赏
  • 举报
回复






why ...
webing520 2012-06-29
  • 打赏
  • 举报
回复
好像没有.图片是采用链式队列push以后,然后得到front,用完以后就pop。
另外,我屏蔽画图函数以后内存也不会激增。
DisplayBitmap(&BitmapInfo,BmpData,rect,m_nCurrentChannelId);这个是我写的绘图函数,bmpdata为位图数据。rect为绘制图片的目的区域。在函数里面可能还会进行调整,比如在整个区域里面进行分隔显示,4*4或者9*9等,根据m_nCurrentChannelID来判断。
我刚才想了一下,是不是每次离屏表面创建的nWidth,&nHeight都是1920*1080,显示区域只有300*256左右,是不是创建太大的缘故呢,我屏幕分辨率为1366*768。
zgl7903 2012-06-29
  • 打赏
  • 举报
回复
高清图片是如何加载和释放的, 是否存在泄漏问题
可以试试图片只加载一次,不断的刷新看看效果, 先区分从问题分界
webing520 2012-06-28
  • 打赏
  • 举报
回复
哦,对了,我是获取屏幕的句柄GetDesktopWindow(),来进行设定控制级的第一个参数。
也用的临界区来进行线程控制。但效果不明显。
webing520 2012-06-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
相信你操作DC应该没问题
可能是directdraw里面的对象没释放干净
[/Quote]
首先感谢你能回复,多谢了.
我是定义的几个全局directdraw对象,在进入类对象里面初始化一次,然后出去的时候解析。然后在类中实现画图函数。
我也试过在一个函数中实现初始化到画图再释放的全过程,但是问题依然存在。

回复有分,希望大家能帮忙
大拙男 2012-06-28
  • 打赏
  • 举报
回复
相信你操作DC应该没问题
可能是directdraw里面的对象没释放干净

19,473

社区成员

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

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