搜索
bottom↓
回复: 5

GDI+的双缓冲绘图方法【恢复】

[复制链接]

出0入0汤圆

发表于 2008-12-14 22:20:30 | 显示全部楼层 |阅读模式
这是自己整理的资料和经验分享,原来放在blog上的,现在转过来和大家分享。







常规的直接绘图方法示例:



Graphics graphics(SampleCtrl.GetDC()->GetSafeHdc());    // 从Device Context中创建GDI+绘图对象



// 开始绘图

Pen pen(Color(255, 255, 255, 255));

graphics.DrawLine(&pen, x1, y1, x2, y2);

...





双缓冲绘图方法示例:



Bitmap bitmap(width, height);    // 创建位图对象

Graphics graphics(&bitmap);         // 从位图对象中创建GDI+绘图对象,作为绘图缓冲区

Graphics graphicsDisplay(SampleCtrl.GetDC()->GetSafeHdc());    // 从Device Context中创建另一GDI+绘图对象,作为前台显示



// 开始在缓冲区中绘图

Pen pen(Color(255, 255, 255, 255));

graphics.DrawLine(&pen, x1, y1, x2, y2);

...



// 把缓冲区内容搬到前台显示

graphicsDisplay.DrawImage(&bitmap, 0, 0, width, height);





双缓冲绘图原理及优点:



先将图像绘在位图对象中,然后将位图内容整体绘到Device Context中。



直接在Device Context上绘图,每条线、每个圆等绘图内容都是在绘制的同时显示的,会耗费一些系统资源,如果绘图内容比较多,则会带来闪烁感甚至看到绘图的过程,尤其是在窗体重绘事件中更明显。而先在位图中绘图,则无需耗费系统资源来显示,速度会快一些,而且最后的绘图结果是作为一整个位图直接绘制在屏幕上的,即使绘图内容很多时也不会看到绘图过程和带来闪烁感。

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
头像被屏蔽

出0入0汤圆

发表于 2009-1-26 15:19:10 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2009-1-26 15:08:27 | 显示全部楼层
能否把SampleCtrl的定义给全?

出0入0汤圆

发表于 2009-1-25 17:25:29 | 显示全部楼层
ucGUI里面有这个东东

出0入0汤圆

发表于 2009-1-25 13:10:46 | 显示全部楼层
不错~

出0入0汤圆

发表于 2009-7-22 15:41:11 | 显示全部楼层
学习
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-20 17:42

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表