前面介绍了如何使用画笔工具Graphics绘制各种图案,然而Graphics并不完美,它的遗憾之处包括但不限于:
1、不能设置背景颜色;
2、虽然提供了平移功能,却未提供旋转功能与缩放功能;
3、只能在控件上作画,无法将整幅画保存为图片;
有鉴于此,AWT提供了Graphics的升级版名叫Graphics2D,这个二维画笔不但继承了画笔的所有方法,而且拓展了好几个实用的方法,包括设置背景色的setBackground方法,旋转画布的rotate方法,缩放画布的scale方法等。尤为关键的是,Graphics2D允许在图像缓存BufferedImage上作画,意味着二维画笔的绘图成果能够保存为图片文件。这可是重大的功能改进,因为一旦保存为图片,以后就能随时拿出来用,不必每次都重新绘画了。
那么要怎样获得二维画笔呢?这还得从缓存图像BufferedImage说起。之前获取缓存图像的时候,是通过ImageIO工具把图片文件读到BufferedImage中,完全按照已有的图片构建缓存图像。其实直接调用BufferedImage的构造方法,也能创建一个空的缓存图像对象,接着调用该对象的createGraphics方法,即可创建并获取新图像的二维画笔,然后使用二维画笔就能在缓存图像上作画了。譬如要旋转某个缓存图像,则利用二维画笔Graphics2D实现的方法代码定义如下:
// 旋转图像。输入参数依次为:原图像、旋转角度
public static BufferedImage rotateImage(BufferedImage origin, int rotateDegree) {
int width = origin.getWidth(); // 获取原图像的宽度
int height = origin.getHeight(); // 获取原图像的高度
int imageType = origin.getType(); // 获取原图像的颜色类型
// 创建与原图像同样尺寸的新图像
BufferedImage newImage = new BufferedImage(width, height, imageType);
// 创建并获取新图像的画笔
Graphics2D graphics2d = newImage.createGraphics();
// 以原图像的中点为圆心,将画布按逆时针旋转若干角度
graphics2d.rotate(Math.toRadians(rotateDegree), width / 2, height / 2