当我们要会绘制的图形有很多点、线、图案时,图案加载出来的速度就会很慢,比如画10万个点
for (int i = 0; i < 100000; i++) {
double tempx = Math.sin(a*y)+c * Math.cos(a*x);
double tempy = Math.sin(b*x)+d * Math.cos(b*y);
int px = (int)(tempx*60+300);
int py = (int)(tempy*60+300);
x=tempx;
y=tempy;
bg.drawLine(px, py, px, py);
}
可以看到,加载速度比较慢,图案慢慢成型
BufferedImage是一个带缓冲区图像类,主要作用是将一幅图片加载到内存中,我们可以先将要画的图案画到缓冲画布上,然后再用画笔绘制这张图片,这样速度会变得很快。
BufferedImage bi = new BufferedImage(this.getWidth(), this.getHeight(), BufferedImage.TYPE_INT_ARGB);
// 从缓冲画布上取画笔
Graphics bg = this.getGraphics();
double x=0,y=0;
double a=-1.8,b=-2.0,c=-0.5,d=-0.9;
Color color = new Color(128,0,0,128);
bg.setColor(color);
for (int i = 0; i < 100000; i++) {
double tempx = Math.sin(a*y)+c * Math.cos(a*x);
double tempy = Math.sin(b*x)+d * Math.cos(b*y);
int px = (int)(tempx*60+300);
int py = (int)(tempy*60+300);
x=tempx;
y=tempy;
bg.drawLine(px, py, px, py);
}
// 用画笔将缓冲画布画出来
g.drawImage(bi, 0, 30, null);
效果图
可以看到刚开始是没有图案的,这时候是先将图案画到缓冲画布上。