首先我要声明的是,在只绘制一次的情况下我们是看不出区别的
但是同一张图片绘制1000次就不同了
protected void paintPicture(Graphics2D g2d) {
if (picture != null) {
Rectangle r = createModelRectangle();
render.setImage(picture);
painter.painted(g2d, r, this);
}
}
先讲解一下这段代码,这段代码中的render是一个图片绘制器,其中只有将图片呈现的代码,而这个render将这个方法交给painter调用
然后painter有使用VolatileImage和不使用VolatileImage绘制的方式选择
然后我们添加上测试数据
protected void paintPicture(Graphics2D g2d) {
if (picture != null) {
Rectangle r = createModelRectangle();
render.setImage(picture);
long a = System.currentTimeMillis();
for (int i = 0; i < 1000; i++) {
painter.painted(g2d, r, this);
}
System.out.println(System.currentTimeMillis() - a);
}
}
窗口大小:500x370
以下是拖动窗口的时间,这些时间是交给SWING进行过优化的,当然,其中大的值比较真实
45
18
1
1
2
2
442
217
241
1
2
窗口大小:不变
不适用加速的绘制方式
62
33
1
1
2317
1143
2
2
很明显,速度上的变化
在JDK帮助中使用硬件加速基本上是不使用硬件加速的5倍能力