首页 > 代码库 > [C#技术参考]在PictureBox 中绘图防止闪烁的办法

[C#技术参考]在PictureBox 中绘图防止闪烁的办法


开篇之前说点别的,马上年终了,好希望年终奖大大的,但是好像这次项目的展示很重要,所以这几天绷得比较近,但是真的没有感觉烦,就是害怕来不及。所以抓紧了。下面直接正题。说一下用到的东西,都是Google搜索来的,但是这些技术真的能用到自己的项目中,自己做的东西等过年回家没事慢慢总结,现在先学习一下别人的东西,也算作一个笔记吧。


我需要在窗体上进行图片的绘制,但是在实际的测试中发现了问题,那就是重绘的时候会发生闪烁,这个问题在初学C语言的课程中也遇到过,在程序绘制动画的高频率刷新的时候,也会产生闪烁,而那时候的解决办法,是对动画进行双缓冲(Double Buffering)处理。


在被双缓冲这个名词吓到之前,我们先来探讨下为什么重绘的时候会发生闪烁:
说道动画的原理大家都懂,就是利用了人眼的视觉残留(Visual staying)现象,当一副画面进入人眼成像后,并不会立刻消失,而是仍会保留一小段时间,于是当连续的图像以很高的速度切换的时候,人眼会看到动态的影响,而不是处于切换中的单个图像。
这个过程可以参考图1:

技术分享

当这三幅图片以一定频率直接切换的时候,人们就会看到A貌似是在向右方移动。

那么为什么我们依据这个原理来编程绘制动画的时候会出现闪烁呢?是因为计算机的速度太慢不够给力么?当然不是!

我们如果不加任何处理,就在画布Canvas上进行绘图,那么计算机的处理过程是这样的:

http://blueve.me/archives/633

[C#技术参考]在PictureBox 中绘图防止闪烁的办法