Java 双缓冲技术消除图片闪动

一般在使用Canvas组件刷新显示图片或者绘图的时候,会产生闪烁。这是由于机制是先使用背景色对原有内容进行覆盖,再往上面绘制新内容所引起的。我们看到的闪烁就是背景色和新内容之间的交替显示。

下面为Canvas中的update()方法的代码

    public void update(Graphics g) {
        g.clearRect(0, 0, width, height);
        paint(g);
    }

从上面可以看出,每当update的时候,首先用背景色对原有内容进行填充,然后再进行绘制。

下面利用双缓冲技术消除闪烁。原理:在刷新之前将要刷新的内容在内存中准备好,刷新的时候不进行填充背景色,直接将内存中的内容画出来。这就要重写update()方法了。

下面为重写的update()方法代码:

class graph extends Canvas
{
private Image buffer;//声明图片缓冲区
public void paint(Graphics g)
{
    //画图代码
}
public void update(Graphics g)
{
    buffer=createImage(getWidth(),getHeight());//创建图片缓冲区
    Graphics gBuffer=bufferImage.getGraphics();//获得图片缓冲区的画笔
		if(gBuffer!=null)
			paint(gBuffer);
		else
			paint(g);
		gBuffer.dispose();
		g.drawImage(bufferImage, 0, 0,null);
}
}
时间: 2024-08-08 04:54:57

Java 双缓冲技术消除图片闪动的相关文章

Java中用双缓冲技术消除闪烁

在Java编写具有连贯变化的窗口程序时,通常的办法是在子类中覆盖父类的paint(Graphics)方法,在方法中使用GUI函数实现窗口重绘的过程.连贯变换的窗口会不断地调用update(Graphics)函数,该函数自动的调用paint(Graphics)函数.这样就会出现闪烁的情况. 为了解决这一问题,可以应用双缓冲技术.可以通过截取上述过程,覆盖update(Graphics)函数,在内存中创建一个与窗口大小相同的图形,并获得该图形的图形上下文(Graphics),再将图片的图形上下文作为

Android开发之用双缓冲技术画图

双缓冲技术主要用在绘图,动画效果上,其原理就是:将资源先加载到缓冲区,然后再将缓冲区整个加载到View上面去.双缓冲技术能够有效防止闪烁,提高显示质量. DrawView.java: package com.example.handdraw; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.graphics.C

双缓冲技术(Double Buffering)(1、简介和源代码部分)

这一节实在是有些长,翻译完后统计了一下,快到2w字了.考虑到阅读的方便和网络的速度,打算把这节分为5个部分,第一部分为双缓冲技术的一个 简介和所有的代码,如果能够看懂代码,不用看译文也就可以了.第二部分为Plotter控件的公有函数的实现,第三部分为Plotter的事件处理函数的 实现,第四部分为Plotter控件的私有函数实现,第五部分为辅助类PlotSettings的实现. 这里给出一些常用的中英文对照(不一定准确,我这样用的): Rubber band(橡皮筋线,或者橡皮线), pixma

avalon与双缓冲技术

avalon与双缓冲技术 avalon1.5一个重要技术升级是引进异步渲染.异步渲染在游戏界有一个更专业的名字,叫双缓冲.游戏界要刷新界面与我们刷新浏览器视图,面临的问题是一致的.视图是由许多存在套嵌关系的方块组成,它们每一个的改动,都可能引起reflow(其父节点,其父父节点的大小重新计算),这是造成性能问题的关键. 双缓冲技术的主要原理是:当一个动画争先显示时,程序又在改变它,前面的画面还没显示完,程序又要求重新绘制,这样屏幕就会不停闪烁.为了避免闪烁,可以使用双缓冲技术,将要处理的图片都放

c++双缓冲技术绘图避免闪烁

当数据量很大时,绘图可能需要几秒钟甚至更长的时间,而且有时还会出现闪烁现象,为了解决这些问题,可采用双缓冲技术来绘图. 双缓冲即在内存中创建一个与屏幕绘图区域一致的对象,先将图形绘制到内存中的这个对象上,再一次性将这个对象上的图形拷贝到屏幕上,这样能大大加快绘图的速度.双缓冲实现过程如下: 1.在内存中创建与画布一致的缓冲区 2.在缓冲区画图 3.将缓冲区位图拷贝到当前画布上 4.释放内存缓冲区 在图形图象处理编程过程中,双缓冲是一种基本的技术.我们知道,如果窗体在响应WM_PAINT消息的时候

Win32 GDI 非矩形区域剪裁,双缓冲技术

传统的Win32通过GDI提供图形显示的功能,包括了基本的绘图功能,如画线.方块.椭圆等等,高级功能包括了多边形和Bezier的绘制.这样app就不用关心那些图形学的细节了,有点类似于UNIX上的X-window协议.你信或者不信,那些看上去很花哨的控件,其实就是一笔一划画上去的而已.GDI提供了画笔(用于线条).画刷(用于填充).调色板(用于支持256色显示).字体(用于文字).如果简单的图形不足以表达,你可以使用位图和画布(DC,设备上下文)直接将图像绘制到屏幕上去.此外,GDI还支持一些简

【MFC】MFC绘图不闪烁——双缓冲技术

MFC绘图不闪烁——双缓冲技术[转] 2010-04-30 09:33:33|  分类: VC|举报|字号 订阅 [转自:http://blog.163.com/[email protected]/blog/static/49846449201033093333394/] 在VC/MFC用CDC绘图时,频繁的刷新,屏幕会出现闪烁的现象,CPU时间占用率相当高,绘图效率极低,很容易出现程序崩溃. 所谓双缓冲技术,下面是百度百科的解释: 我们看电视时,看到的屏幕称为OSD层,也就是说,只有在OSD层

基于c#的双缓冲技术画图

导致画面闪烁的关键原因是:.窗口刷新一次的过程中,每一个图元的重绘都会立即显示到窗口,因此整个窗口中,只要是图元所在的位置,都在刷新,而刷新的时间是有差别的,闪烁现象自然会出现.所以说,此时导致窗口闪烁现象的关键因素并不在于Paint事件调用的次数多少,而在于各个图元的重绘. 因此,,当图数目不多时,窗口刷新的位置也不多,窗口闪烁效果并不严重;当图元数目较多时,绘图窗口进行重绘的图元数量增加,绘图窗口每一次刷新都会导致较多的图元重新绘制,窗口的较多位置都在刷新,闪烁现象自然就会越来越严重.特别是

控制台双缓冲技术

简介 双缓冲技术主要使用在绘图方面,不过,借鉴双缓冲技术的原理,可以让你的控制台程序优势更加优秀的体验,例如你编写的控制台游戏,往往需要不停地刷新屏幕,这时候会造成非常严重的问题-----屏幕闪烁!这极大的降低了用户体验(虽然说没什么用户吧,但这并不妨碍我们追求完美嘛~),双缓冲就可以消除这种闪烁 控制台双缓冲技术原理: 背景知识:你所看到的黑色界面所显示的东西 都是在"屏幕缓冲区"中显示的,我们能看的这个缓冲区,叫做"当前(激活的)屏幕缓冲区",我们可以创建其他缓