绘图闪烁问题

来源:互联网 发布:矩阵型组织结构优缺点 编辑:程序博客网 时间:2024/05/20 16:45

在我们使用窗口程序中,绘图是我们经常要用到到,也就是在paint消息中填写绘制代码,将内容显示到屏幕上,但是在绘图过程中有一个问题,也许是大家都会遇到的,也就是绘图闪烁的问题,尤其是在我们绘制的内容多而且复杂,绘制的频率较高的时候,这个问题就变得越严重,为了解决这个问题,我总结了一下,有一下几个方法。

首先是使用双缓冲区技术的方法绘图,这种方法较为普遍,而且使用起来简单,它仍然是建立在GDI,或是GDI+之上的,这个方法在网上资料较为充足,这里不做详细说明,它的原理就是建立一个内存DC,这个DC和窗口DC一样,不同的是它的内容并不直接显示在屏幕路之上,但是使用起来的方法是和窗口DC是一样的,我们首先将要绘制的内容绘制到这个内存DC中之后,再由这个内存DC一次性将内容绘制到窗口DC之上,这样可以有效的解决绘图的时候带来的闪烁问题。

第二种方法,就是我们要更新的内容也许并不是窗口的整个客户区,而是其中一个小块,那么当我们需要更新内容的时候,不必使整个内容都完全更新,重新绘制,我们只更新内容改变的那一个部分。因此,这时候,我们发出的paint消息的无效区只是一个小块,那么paint就只会绘制那一小块,由于绘制的内容较少,消耗的绘制时间也就短,人眼就感觉不到闪烁,因此,这也是一种绘图的方法,要实现这个方法,我们可以使用函数 InvalidateRect,InvalidateRgn,RedrawWindow.而且更新的时候,也不要选择擦除背景,如果选择擦除背景,那么闪烁会很严重。

第三种方法,我个人认为是最有效,最好的办法,如果用以上两种方法无法解决的时候,我们就可以用这个方法,这个方法就是使用Direct2D,使用它可以充分利用硬件加速,已提供更高的性能,更好的绘制质量。使用它可以充分的利用计算机的GPU进行图形计算,已达到更高的性能。而且就绘图本身,它也提供了更多的特效以及绘制方式。

本文总结了三种方法来解决绘图过程中遇到的绘图闪烁的问题,也许还有别的更好的方法。对于上面提到的方法,这里只作为一个指引作用,具体信息,自己可以根据情况,进行学习研究。如果你是一个初学者,建议你到MSDN上找你想要的信息。如果不是初学者,自然就知道应该到MSDN上找信息,呵呵!!

0 0
原创粉丝点击