许多人在制作窗体背景时,就只是获取窗体的画布g,然后就开始调用画布的drawImage()方法画上背景,其实这在画静态背景时是可以用的,但在画动态背景时是不可取的,那么应该怎么做呢,这里先贴上代码再说明
//创建一个图片缓冲区,先将图片画到缓冲区上
BufferedImage imageBuffer =
new BufferedImage(width,height,BufferedImage.TYPE_INT_ARGB);
ImageIcon icon = new ImageIcon("images/1.jpg");
//图片缓冲区的画布
Graphics gg = imageBuffer.getGraphics();
gg.drawImage(icon.getImage(),0,0,icon.getIconWidth(),icon.getIconHeight(),0,0,icon.getIconWidth(),icon.getIconHeight(),null);
//将图片缓冲区中的图片画到窗体上,方能显示出来
g.drawImage(imageBuffer,0, 0, null);
先讲一下这段代码所用到的思想:
创建一个BufferedImage,BufferedImage是一个图片缓冲区,在这里你可以将它看作一个自由的画布,先往这个自由的画布上画上你想画的东西,然后再将这个自由的画布当作一幅画,整个画到窗体上。那么这种思想有什么好处呢?答案应该是显而易见的,当你经常改变要画的东西时,只在图片缓冲区中该变即可,将所有的该变完成后再显视到窗体上,这样窗体上的动画就不会因为一步一步刷新而闪烁了,这种用中间量的方法是编程中很重要的一种思想。
下面简介一下画布的drawImage方法的一个用法:
<!-- Generated by javadoc (build 1.6.0-beta2) on Mon Mar 19 18:18:02 CST 2007 -->
<noscript></noscript>public abstract boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, ImageObserver observer)
- 绘制当前可用的指定图像的指定区域,动态地缩放图像使其符合目标绘制表面的指定区域。透明像素不影响该处已存在的像素。 参数:
-
img
- 要绘制的指定图像。如果img
为 null,则此方法不执行任何操作。 -
dx1
- 目标矩形第一个角的 x 坐标。 -
dy1
- 目标矩形第一个角的 y 坐标。 -
dx2
- 目标矩形第二个角的 x 坐标。 -
dy2
- 目标矩形第二个角的 y 坐标。 -
sx1
- 源矩形第一个角的 x 坐标。 -
sy1
- 源矩形第一个角的 y 坐标。 -
sx2
- 源矩形第二个角的 x 坐标。 -
sy2
- 源矩形第二个角的 y 坐标。 -
observer
- 当缩放并转换了更多图像时要通知的对象。
API上讲的这些也不一定能看的懂,其实这个方法就是将一个矩形{(dx1,dy1),(dx2,dy2)}缩小或放大到{(sx1,sy1),(sx2,sy2)}这么大。