GDI 绘图的几个技巧
2008-08-05 10:10
239 查看
1. 解决屏幕闪烁的双缓冲技术:
1) 将所要绘制的元素一次性绘制到后台DC,然后将后台DC拷贝到屏幕DC上.
2) 重写擦除窗体背景函数BOOL OnEraseBkgnd(CDC* pDC) ,直接return tuere.
2.用对象来管理GDI对象:在构造函数中创建GDI对象,在析构函数中释放.
3. 脏矩形技术实现快速平滑的动画绘制,实现步骤:
1)将背景窗口内容拷贝到一个内存DC中dcScreen.
2) 根据移动图元上一位置和当前位置计算被弄脏的矩形区域dirty_rect。
3)声明一个内存DC drawDC,大小为dirty_rect.
4) 将dcScreen的dirty_rect.所在内容拷贝到drawDC上.
5) 将图元绘制到drawDC(根据当前位置,计算offset).
6)拷贝drawDC到屏幕DC的dirty_rect.
4.图元半透明绘制技术, 在脏矩形技术的第四步基础上:
5) 将图元绘制到内存DC drawDC2,并设置一个背景色back_color.
6) 将drawDC和drawDC2位图信息进行带color_key(back_color)的alpha混合叠加.
7)拷贝drawDC到屏幕DC的dirty_rect.
注意: drawDC和drawDC2位图信息进行alpha混合叠加时,在32 位下使用DIB,其它的
使用DDB,否则速度极慢.
我测试过此效果,速度还是可以,比GDI+快得多了.
1) 将所要绘制的元素一次性绘制到后台DC,然后将后台DC拷贝到屏幕DC上.
2) 重写擦除窗体背景函数BOOL OnEraseBkgnd(CDC* pDC) ,直接return tuere.
2.用对象来管理GDI对象:在构造函数中创建GDI对象,在析构函数中释放.
3. 脏矩形技术实现快速平滑的动画绘制,实现步骤:
1)将背景窗口内容拷贝到一个内存DC中dcScreen.
2) 根据移动图元上一位置和当前位置计算被弄脏的矩形区域dirty_rect。
3)声明一个内存DC drawDC,大小为dirty_rect.
4) 将dcScreen的dirty_rect.所在内容拷贝到drawDC上.
5) 将图元绘制到drawDC(根据当前位置,计算offset).
6)拷贝drawDC到屏幕DC的dirty_rect.
4.图元半透明绘制技术, 在脏矩形技术的第四步基础上:
5) 将图元绘制到内存DC drawDC2,并设置一个背景色back_color.
6) 将drawDC和drawDC2位图信息进行带color_key(back_color)的alpha混合叠加.
7)拷贝drawDC到屏幕DC的dirty_rect.
注意: drawDC和drawDC2位图信息进行alpha混合叠加时,在32 位下使用DIB,其它的
使用DDB,否则速度极慢.
我测试过此效果,速度还是可以,比GDI+快得多了.
相关文章推荐
- Matlab几个绘图技巧,坐标轴翻转等
- C# GDI+ 简单绘图(三)
- c++ GDI绘图 利用SetROP2函数的R2_NOT与R2_NOTXORPEN属性,重新绘制时清除原先的图
- Windows GDI绘图-入门篇
- 进行数据库设计时不妨请参考如下几个技巧
- Android群英传知识点回顾——第六章:Android绘图机制与处理技巧
- GDI绘图中的映射模式CDC::SetMapMode()
- 提升磁盘IO性能的几个技巧
- 关于内联汇编的几个技巧
- GDI绘图之画刷
- 关于局域网中共享的几个小技巧
- 培训一:GDI绘图方法
- 开发中可能会用到的几个 jQuery 小提示和技巧 (转)
- 开发中可能会用到的几个 jQuery 小提示和技巧
- 几个小技巧让你的英文没有语法错误
- 几个很有用的magento模板调试技巧
- Java数据库编程中的几个常用技巧
- C#知识点-GDI绘图
- GDI绘图(一)
- 第五章 绘图基础 (GDI、设备环境、点线绘制、填充)