一、产生双缓冲的原因
为什么我们要用到双缓冲呢?因为它能满足我们的需要。什么需要?这个对于经常做一些游戏动态画面的我们来说,是深有体会的。我们经常会发现动态的游戏画面会出现闪烁的现象。这不是我们希望看到的。为什么会有这种现象。据说,这是由于我们要做动态画面时,会用到重绘方法,即repaint()。而每次调用这个方法,就会调用里面的dataup()方法,这个就会刷新界面,即把原来的画面用一张白纸代替,再在这张白纸上画出程序正在运行的新的要执行的指令要求的图像画面。这样就会产生一个过程,即擦掉原来的图像,用白纸代替后又画上新的图像。而这个用白纸代替后画图形的过程,在我们的眼睛看来就是“闪烁”。所以为了解决这个问题,绘图的双缓冲方法就应运而生了。
二、双缓冲的原理以及使用方法
原理:根据上面讲到的闪烁的原因,解决问题的关键是不要让我们的眼睛看到那个用白纸代替后画图的过程。所以就有了这个方法:创建一个缓冲图片,在缓冲图片中画图,再把这个已经完全画好的缓冲图片画到界面上去。缓冲图片是我们看不见的,在它上面绘图是在计算机后台运作的。
使用方法:其实在原理中已经讲到了。这里就演示几行代码,其中的意思也就很明了了。
// 定义绘制方法
public void draw() {
// 创建一个图片缓存区
BufferedImage bImage = new BufferedImage(this.getWidth(),
this.getHeight(), BufferedImage.TYPE_INT_RGB);
// 获取缓存区画布
Graphics g = bImage.getGraphics();
// 设置画笔颜色
g.setColor(Color.GRAY);
// 将屏幕填充为画笔颜色
g.fillRect(0, 0, width, heigth);//width和heigth是我们在一个类中定义的int型变量,我们可以创建一个线程类,重写其中的run()方法,使得width和heigth的值每隔几十或几百毫秒变化一次,这个可以通过调整Thread.sleep(int time)方法中的time值来实现。用start()方法启动这个线程,这样当我们用一个对象来调用这个这个draw()方法时,就能够画出很多不同位置的矩形了。
// 获取窗体画布
Graphics gra = this.getGraphics();
// 将缓存区图片画到窗体上
gra.drawImage(bImage, 0, 0, null);
}
正像前面注释部分提到的一样,我们可以在一个类中实例化一个对象来调用这个draw()方法,这样就不会产生闪烁的动态图像了。
分享到:
相关推荐
本资源"【Qt】2D绘图之双缓冲绘图.rar"可能包含一个名为"12Draw"的示例项目,它很可能演示了如何在Qt中实现双缓冲技术。 在2D绘图中,双缓冲机制分为前台缓冲和后台缓冲。传统的单缓冲绘图方式,当图像在屏幕上被...
在本节中,我们将通过一个具体的例子来展示如何在Visual C++中实现双缓冲绘图。示例中,我们将绘制一系列的同心圆,并观察在没有使用双缓冲技术时的闪烁现象,以及使用双缓冲技术后如何消除这一问题。 ##### 普通...
在标题"‘MFC 双缓冲绘图 调用内存缓冲区 使画面连贯’"和描述"‘MFC 双缓冲绘图 圆球在屏幕中移动的动画,碰到边框反弹,解决了闪烁的问题’"中,我们可以深入探讨以下几个关键知识点: 1. **双缓冲技术**: - 在...
在这个例子中,`TetrisDoubleBuffered.java`很可能是实现俄罗斯方块游戏的主类,它继承自`JPanel`,并覆盖了`paintComponent()`方法,实现了双缓冲绘图。`State.java`可能包含了游戏状态的管理,如方块的状态、游戏...
本文将深入探讨MFC双缓冲绘图技术及其在IDC_STATIC控件上的应用,同时提供相关的源码解析。 双缓冲绘图是一种优化图形绘制性能的技术,它能有效地减少屏幕闪烁,提升用户体验。在传统的单缓冲绘图中,每当图形更新...
双缓冲技术是C#绘图中的一种常用技术,用于解决绘图窗口闪烁问题。.NET Framework 1.1 和 .NET 2.0 中的双缓冲技术有所不同。在 .NET 1.1 中,使用 `this.SetStyle(ControlStyles.DoubleBuffer, true);` 可以实现双...
当一个窗体或者控件开启双缓冲后,所有的绘图操作都会先在内存中的一个“缓冲区”上完成,然后再一次性将整个缓冲区的内容显示到屏幕上。这种方法避免了每次绘图操作直接对屏幕进行刷新,从而减少了闪烁和更新不一致...
GDI+ 的双缓冲技术可以简单地理解为将绘图操作缓存在内存中,然后将其快速地绘制到屏幕上,从而提高绘图效率。这种技术可以减少屏幕刷新的次数,并且可以避免屏幕闪烁。 在上面的代码中,我们首先创建了一个普通的 ...
双缓冲绘图技术是一种在计算机图形学中广泛使用的优化策略,尤其在GUI(图形用户界面)和游戏开发中。它的核心思想是减少屏幕闪烁和图像撕裂现象,从而提供更流畅、更高质量的视觉体验。在本文中,我们将通过一个...
1、双缓冲绘图技术概述 原理:将一般的在CDC中绘图改成在一内存设备中绘图(CDC型变量,一般命名为pMemDC),然后使用BitBlt()函数将pMemDC中的图像复制到CDC中; 步骤: ①创建内存设备CDC *pMemDC;关联设备...
在QT中,`QGraphicsView`和`QGraphicsScene`是实现双缓冲绘图的关键组件。`QGraphicsView`作为视图类,负责显示`QGraphicsScene`中的内容,而`QGraphicsScene`则作为场景类,包含了所有可绘的对象。通过重载`...
在计算机图形学中,双缓冲绘图是一种优化技术,用于减少屏幕闪烁和图像撕裂现象。这种方法主要用于GUI(图形用户界面)和游戏开发,确保在更新屏幕内容时提供平滑的动画效果。在这个"双缓冲模板类demo"中,开发者...
双缓冲绘图是一种在计算机图形学中用于减少屏幕闪烁和提高图像质量的技术。在传统的单缓冲绘图中,每当图形需要更新时,程序会直接在屏幕上绘制新的图像,这可能导致用户看到部分完成或未完成的图像,即所谓的“闪烁...
在这个“CScrollView双缓冲绘图_VS2010”项目中,我们探讨的是如何在Visual Studio 2010环境下利用`CScrollView`实现双缓冲技术来优化绘图性能。 双缓冲绘图是一种常见的图形绘制优化策略,主要解决屏幕闪烁问题。...
在双缓冲中,图形首先被绘制到内存中的一个“后台缓冲区”上,而不是直接绘制到屏幕上。当绘图完成时,整个后台缓冲区的内容一次性复制到前台缓冲区(即屏幕),这样就避免了因逐像素更新而引起的闪烁。 1. 直接...
双缓冲绘图的基本思想是,在内存中创建一个与屏幕相同大小的“后台缓冲区”,所有的绘图操作都在这个缓冲区中完成。当所有的绘制工作完成后,再一次性将缓冲区的内容复制到屏幕上,即“前台缓冲区”。这种方法避免了...
在这个1.0.1版本中,开发者引入了双缓冲绘图技术,显著提升了游戏画面的流畅度和用户体验。本文将详细探讨这一技术的应用及其在游戏中的作用。 双缓冲绘图,是图形编程领域中常用的一种优化手段,主要目的是解决...
### 在Visual C++中应用双缓冲技术进行绘图 #### 双缓冲技术概述 双缓冲技术是一种用于提高图形用户界面(GUI)响应速度的技术,在视觉效果处理方面具有重要作用。尤其在Visual C++环境下,利用双缓冲可以显著减少...
双缓冲绘图的基本思想是将绘图操作先在一个内存中的位图(也称为后台缓冲区)上完成,待所有绘制完成后,一次性将这个位图复制到屏幕上(前台缓冲区)。这样,用户看到的是完整的一帧,而不是逐个绘制的过程,从而...
CDC双缓冲防闪屏绘图总结 CDC双缓冲防闪屏绘图是一种高效的绘图技术,它可以避免在屏幕绘图时出现闪烁现象。这种技术通过使用双缓冲机制,先将多张图绘制在内存中,然后再将其输出到屏幕上,从而避免了闪烁。 在...