用内存设备环境(Memory Device Context)与GetClipBox函数(获得需要重绘的区域)实现无闪烁的高效绘图
来源:互联网 发布:淘宝一折特卖 - 百度 编辑:程序博客网 时间:2024/05/01 04:25
下面对以上代码进行说明:
(1)获得需要绘图的矩形(Rectangle)
通常使用GetClientRect()函数获得整个区域。但是,通常情况下并不是整个区域都要绘制,比如:你用另一个窗口遮住了需要绘制的窗口的一部分,当你移动遮挡窗口时,只需要绘制露出的那部分就行了,犯不着把整个窗口都绘制一遍,这样效率很低下。我们用CDC::GetClipBox函数获得需要绘制的矩形区域(即无效区域)。
(2)实现无闪烁的绘图
想要消除闪烁,当然首先要知道为什么产生闪烁。那样我们才知道这样避免闪烁。
闪烁是由背景色与绘图产生强烈反差引起的。也就是说我在绘图前先要擦掉我绘图区域的以前图片,否则将会与以前的图片发生混乱,这可以用在黑板上写字的例子做理解,如果在我写字之前,黑板上有字,那么我在写字的话,你保证下面看的人愿意吗?呵呵。所以,我先擦掉原来的字,再写。OK。在计算机中类似,但是我不是用黑板擦,我是用一种颜色(背景色)涂满我要绘图的区域,然后再绘图。这样,涂色,绘图,涂色,绘图.............,让人的眼睛产生了闪烁的感觉。那我们要是先把图画好,再显示出来,那闪烁的效果就没了。这类似与动画片,大家知道动画片的每一帧都是一个完整的图片,快速播放,是没有闪烁效果的。要是在每帧之间插个白色图片(类似图背景色),就有闪烁效果了。
所谓内存设备环境,就是我们在内存中建立一个与物理设备兼容的设备环境。再创建一个与设备兼容的位图,内存设备环境在这个位图上绘图,然后再把画好的位图拷贝到物理设备环境。这样就是上面我提到的消除闪烁的方法的实现。
// 创建与设备上下环境兼容的设备环境
CDC memDc;
memDc.CreateCompatibleDC(pDC);
// 创建一个与设备兼容的位图(宽,高与需要绘图的区域对应)
CBitmap memBitmap;
memBitmap.CreateCompatibleBitmap(pDC, clipRect.Width(), clipRect.Height());
//
// Erase the background
memDc.FillSolidRect(0, 0, clipRect.Width(), clipRect.Height(), RGB(211, 211, 211));
- 用内存设备环境(Memory Device Context)与GetClipBox函数(获得需要重绘的区域)实现无闪烁的高效绘图
- 关于memory device context内存设备上下文和位图
- Vc中关于DC(设备环境函数(Device Context))的理解
- Vc中关于DC(设备环境函数(Device Context))的理解
- Vc中关于DC(设备环境函数(Device Context))的理解
- VC的内存绘图防止屏幕闪烁技术的实现
- VC的内存绘图防止屏幕闪烁技术的实现
- VC的内存绘图防止屏幕闪烁技术的实现
- Device Context 设备环境 设备上下文 理解
- Device Context 设备环境 设备上下文 理解
- Device Context 设备环境 设备上下文 理解
- 无闪烁刷屏技术的实现如何提高绘图的效率
- 【局部刷新】GetUpdateRect和GetClipBox 获取无效区域的区别
- memory pool 的高效实现
- Postmaster的Memory Context 初始化内存结构
- 双缓冲实现无闪烁绘图
- 双缓存实现无闪烁绘图
- MTD(memory technology device内存技术设备)
- 如何进行网站优化(转)
- Hive-0.5中SerDe概述
- 浅谈const
- D3DXMatrixLookAtLH
- js滚动条
- 用内存设备环境(Memory Device Context)与GetClipBox函数(获得需要重绘的区域)实现无闪烁的高效绘图
- SharpStreaming项目开发纪实:构建基本的服务器及客户端应用(六)——服务器通信部分初步实现
- mxmlc FLEX命令行编译could not find JRE / JVM
- LINUX系统的运行级别
- 约瑟夫问题
- web 页面防复制防拷贝
- Qt中的多线程编程
- table和div的水平居中和垂直居中
- 为何无法自动获取IP地址