最近在使用directdraw来画高清格式的大图片,由于之前没有用过directdraw,所以对其用法也不甚了解。根据directdraw流程来画图。初始化,创建directdraw对象,设定控制级,创建主表面,创建离屏表面,GetDC()得到DC,然后将pData数据拷贝到离屏DC上,完了之后就ReleaseDC()释放离屏DC,将离屏图案blt到主表面,最后释放所有对象和表面。
可能是内存占用比较多,在线程中调用该绘制函数,几秒钟以后内存就急剧增加,直至崩溃。查看后也没有怎么发现内存泄露,使用的是内存池。
网络上说可能是DC没有释放,可是我已经ReleaseDC了。离屏表面的返回值也是正确的,说明释放完毕。
现在一直没有好的办法,如果有经历过directdraw的朋友,可以告诉我该怎么搞,先谢了。
可能是内存占用比较多,在线程中调用该绘制函数,几秒钟以后内存就急剧增加,直至崩溃。查看后也没有怎么发现内存泄露,使用的是内存池。
网络上说可能是DC没有释放,可是我已经ReleaseDC了。离屏表面的返回值也是正确的,说明释放完毕。
现在一直没有好的办法,如果有经历过directdraw的朋友,可以告诉我该怎么搞,先谢了。
解决方案 »
- 界面问题~!
- 线程局部存储(TLS)是如何实现的?
- 字体问题
- mib表中的数据值例如systemname是从设备获取后存进去的还是?,那怎样获取这些数据然后再存???
- 用重叠IO的完成例程模型,在传送大文件时,服务器阻塞
- 是这样的:建立一个MFC单文档,但是我想把那块文档区域换成我自己创建的对话框资源
- unresolved external symbol "public: virtual __thiscall CPicture::~CPicture(void)" (??1CPicture@@UAE@XZ)
- 类的静态成员函数怎么调用非静态成员函数
- 关于《一个在阅读<<深入浅出MFC>>中遇到的问题 !!!!急》的再请教 tpProgramer(tp编程者)
- 怎么用SendMessage 按下虚拟键 F1
- Vc Edit控件怎么判断用户暂停输入了?
- WTL CListViewCtrl中的 单击消息及响应
可能是directdraw里面的对象没释放干净
我是定义的几个全局directdraw对象,在进入类对象里面初始化一次,然后出去的时候解析。然后在类中实现画图函数。
我也试过在一个函数中实现初始化到画图再释放的全过程,但是问题依然存在。
回复有分,希望大家能帮忙
也用的临界区来进行线程控制。但效果不明显。
另外,我屏蔽画图函数以后内存也不会激增。
DisplayBitmap(&BitmapInfo,BmpData,rect,m_nCurrentChannelId);这个是我写的绘图函数,bmpdata为位图数据。rect为绘制图片的目的区域。在函数里面可能还会进行调整,比如在整个区域里面进行分隔显示,4*4或者9*9等,根据m_nCurrentChannelID来判断。
我刚才想了一下,是不是每次离屏表面创建的nWidth,&nHeight都是1920*1080,显示区域只有300*256左右,是不是创建太大的缘故呢,我屏幕分辨率为1366*768。