社区
界面
帖子详情
GDI 绘图丢失
灿烂李
2008-09-25 06:12:23
做一个 安防监控的电子地图程序
在窗体上绘图 加载图像用的是类是 ATL::CImage
绘图用的CDC
发现 绘图窗体 创建销毁 7次后 便绘不出图来了
7次后 1:1的比例不能绘制,看Image和CDC 都有效 缩小的比例可以
到第8次,什么比例都没有图像显示了
而且VC++的Watch窗口也变的被刷没了,就是看不到容 一个暗灰色的白框效果
这有可能是什么原因造成的? 难道是绘图环境被损坏了?
...全文
131
8
打赏
收藏
GDI 绘图丢失
做一个 安防监控的电子地图程序 在窗体上绘图 加载图像用的是类是 ATL::CImage 绘图用的CDC 发现 绘图窗体 创建销毁 7次后 便绘不出图来了 7次后 1:1的比例不能绘制,看Image和CDC 都有效 缩小的比例可以 到第8次,什么比例都没有图像显示了 而且VC++的Watch窗口也变的被刷没了,就是看不到容 一个暗灰色的白框效果 这有可能是什么原因造成的? 难道是绘图环境被损坏了?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
灿烂李
2008-09-26
打赏
举报
回复
解决了 确实是资源泄漏
m_memBmp.Detach();
m_preBmp.Detach();
m_memBmp.DeleteObject();
m_preBmp.DeleteObject();
先后顺序 导致的 先 m_preBmp.Detach(); 导致 m_memBmp.DeleteObject(); 返回失败 实际没有被释放
但 查看程序 句柄没有增加 谢谢大家了
梧桐168
2008-09-26
打赏
举报
回复
分析代码之前,可以用工具(Bear等)检测以下是否有资源泄露
灿烂李
2008-09-25
打赏
举报
回复
这是构造函数
CMemoryDC::CMemoryDC(CWnd *pWnd, BOOL bAirscape)
{
m_pClientDC = new CClientDC(pWnd);
m_pWnd = pWnd;
m_pWnd->GetClientRect(&m_clientRc);
if (bAirscape)
{
m_iWidth = m_clientRc.Width();
m_iHeight = m_clientRc.Height();
}
else
{
m_iWidth = ::GetSystemMetrics(SM_CXSCREEN);
m_iHeight = ::GetSystemMetrics(SM_CYSCREEN);
}
m_memDC.CreateCompatibleDC(m_pClientDC);
m_memBmp.CreateCompatibleBitmap(m_pClientDC, m_iWidth, m_iHeight);
m_memDC.SelectObject(&m_memBmp);
m_preDC.CreateCompatibleDC(m_pClientDC);
m_preBmp.CreateCompatibleBitmap(m_pClientDC, m_iWidth, m_iHeight);
m_preDC.SelectObject(&m_preBmp);
::SetStretchBltMode(m_memDC.m_hDC, HALFTONE);// 提高缩放后图像质量
::SetStretchBltMode(m_preDC.m_hDC, HALFTONE);
m_rectImage.SetRect(0, 0, m_iWidth, m_iHeight);
}
灿烂李
2008-09-25
打赏
举报
回复
我调用的是m_pclientdc= GetClientDC(wnd)
在delete m_pclientdc
xsc2001
2008-09-25
打赏
举报
回复
你是不是在调用CDC *pDC = GetDC();后没有释放pDC呀,应该调用ReleaseDC(pDC);释放pDC.如果不释放多次调用以后就会出现问题。
JacksonFox
2008-09-25
打赏
举报
回复
不知道了。。可能其他地方内存泄漏?
以前做过一次,开始的时候有内存泄漏,软件运行1天后,屏幕开始黑白,什么图片都没有。
灿烂李
2008-09-25
打赏
举报
回复
CMemoryDC::~CMemoryDC(void)
{
m_memBmp.Detach();
m_preBmp.Detach();
m_memBmp.DeleteObject();
m_preBmp.DeleteObject();
m_memDC.DeleteDC();
m_preDC.DeleteDC();
SAFE_DELETE(m_pClientDC)
}
这样释放的
JacksonFox
2008-09-25
打赏
举报
回复
内存的问题吧。。看看你重新创建前有没有销毁以前的。。要释放内存的。
ICO图标显示色彩
丢失
?手把手教你修复Windows
GDI
绘图
中的像素覆盖问题
本文深入剖析Windows
GDI
中ICO图标显示时色彩
丢失
的根本原因,聚焦于AND掩码与色彩层的叠加顺序错误及即时
绘图
引发的像素覆盖问题;提出两种核心解决方案:严格遵循‘先掩码后色彩’的绘制顺序,以及采用内存DC实现双缓冲
绘图
;同时指出位深度匹配、
GDI
资源释放和DPI适配等关键优化要点。
解决图标打印色彩
丢失
?深入理解ICO掩码图(AND/XOR)与Windows
GDI
绘图
本文深入剖析Windows ICO图标中AND/XOR掩码图的技术机制,解释打印及自定义渲染中色彩
丢失
、边缘锯齿等异常的根本原因,涵盖ICO二进制结构、掩码历史演进、
GDI
绘图
操作顺序(SRCAND/SRCPAINT)、打印机DC特性适配,以及现代API替代方案与手动渲染实现要点。
C#
GDI
学习
本文介绍了
GDI
(Graphics Device Interface Plus)的基础知识,包括如何创建Graphics对象,解决图像
丢失
问题的方法,坐标系的原理以及
GDI
提供的
绘图
工具如画笔和笔刷。还提到了坐标系的原点、方向以及描述坐标的结构,如Point、Size等。
通用GUI编程技术——图形渲染实战(二十八)——图像格式与编解码:PNG/JPEG全掌握
本文深入讲解Windows平台下
GDI
+对PNG、JPEG等主流图像格式的原生编解码支持,涵盖编解码器枚举、FromFile/FromStream加载差异及文件锁定规避、CLSID编码器获取、JPEG质量控制、批量格式转换实现,并详解WM_PAINT
绘图
模板与三大典型问题(编码器未初始化、Save失败、Alpha通道
丢失
)的调试方法。
C#
GDI
+
绘图
高级编程(包含滚动条后重绘)
本文详细介绍了
GDI
+中的设备环境(Graphics对象)、
绘图
规则以及坐标系统。
GDI
+提供了一个抽象层,隐藏了不同视频卡之间的差异,使得开发者可以通过调用WindowsAPI函数进行
绘图
。设备环境(DC)在
GDI
+中用于识别输出设备,Graphics对象则包含了
绘图
所需的所有信息。在
绘图
时,需要通过设备环境完成工作,如使用Pen类绘制线条和形状,使用Brush类填充区域。文章还探讨了坐标系统,包括Point、Size、Rectangle等结构,以及世界坐标、页面坐标和设备坐标的区别。此外,还提到了滚动条的处理和颜色的表示,如使用Pen和Brush类来定制线条和填充效果。
界面
15,976
社区成员
115,866
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章