我在互联网上找到了这个双缓冲代码,但没有解释。我在这段代码中有点困惑。
为什么使用Image“i”?如果要使用一次它有什么用?
为什么我们已经设置了颜色时,我们是否为前景颜色指定了更改颜色?
g.drawImage()方法在做什么?
以下是代码:
public void update(Graphics g)
{
if(i==null)
{
i=createImage(getWidth(), getHeight());
graph=i.getGraphics();
}
graph.setColor(getBackground());
graph.fillRect(0, 0, getWidth(),getHeight());
graph.setColor(getForeground());
paint(graph);
g.drawImage(i,0,0,this);
}
此致
答案 0 :(得分:6)
Double Buffering的基本思想是在屏幕外创建图像,然后立即显示它。
从找到的here
的java教程中你在那里的代码首先创建一个图像,在第一次通过这个位作为你的“后缓冲区”,我可能是一个字段,如
private Image i;
private Graphics graph;
if(i==null)
{
i=createImage(getWidth(), getHeight());
graph=i.getGraphics();
}
然后使用此
将背景颜色涂在图像上graph.setColor(getBackground());
graph.fillRect(0, 0, getWidth(),getHeight());
然后设置前面准备好绘图。
graph.setColor(getForeground());
paint(graph); /draws
最后将后缓冲区拉到主表面。
g.drawImage(i,0,0,this);
答案 1 :(得分:2)
图形操作全部在从Graphics
获得的i
上执行,Graphics
是内存中的位图。
完成后,位图将被绘制到“真实”(屏幕)g
对象i
上。因此,用户永远不会看到半成品图纸,这消除了闪烁。
第一次分配字段{{1}}然后重复使用,因此它不仅使用一次。