@[toc]
Java偏向于图形化界面编程,当然就有图像显示之类的东西,图形处理方面也是强项。
1、Graphics类
Graphics类是所有图形上下文的抽象基类,它允许应用程序在组件以及闭屏图像上进行绘制。Graphics类封装了Java支持的基本绘图操作所需的状态信息,主要包括颜色、字体、画笔、文本、图像等
Graphics类提供了绘图常用的方法,利用这些方法可以实现直线、矩形、多边形、椭圆、圆弧等形状和文本、图片的绘制操作。另外,在执行这些操作之前,还可以使用相应的方法,设置绘图的颜色、字体等状态属性。
g.drawRect(10, 10, 100, 50);
// 三角
int[] xs = {10, 50, 30};
int[] ys = {80, 80, 110};
g.drawPolygon(xs, ys, 3);
// 圆形
g.drawOval(130,10,80,80);
// 椭圆
g.drawOval(60,80,80,50);
2、Graphics2D类
使用Graphics类可以完成简单的图形绘制任务,但是它所实现的功能非常有限,例如无法改变线条的粗细、不能对图片使用旋转、模糊等过滤效果。
Graphics2D g2 = (Graphics2D) g;
g2.setStroke(new BasicStroke(4.0F));
g2.setColor(Color.BLUE);
g2.drawOval(10, 10, OVAL_WIDTH, OVAL_HEIGHT); // 绘制第1个圆形
g2.setStroke(new BasicStroke(8.0F));
g2.setColor(Color.CYAN);
g2.drawOval(130, 10, OVAL_WIDTH, OVAL_HEIGHT); // 绘制第2个圆形
g2.setStroke(new BasicStroke(2.0F));
g2.setColor(Color.GREEN);
g2.drawOval(250, 10, OVAL_WIDTH, OVAL_HEIGHT); // 绘制第3个圆形
g2.setStroke(new BasicStroke(5.0F));
g2.setColor(Color.MAGENTA);
g2.drawOval(70, 120, OVAL_WIDTH, OVAL_HEIGHT); // 绘制第4个圆形
g2.setStroke(new BasicStroke(9.0F));
g2.setColor(Color.ORANGE);
g2.drawOval(190, 120, OVAL_WIDTH, OVAL_HEIGHT); // 绘制第5个圆形
Date now=new Date();
String nowStr = String.format("%tY年%tm月%td日", new Date[]{now, now, now});
Font font = new Font("宋体",Font.BOLD,14);
g2.setFont(font);
g2.drawString(nowStr, 80, 300);
3、设置颜色、画笔、文本
使用Color类可以创建任何颜色的对象
Java2D的Graphics2D类可以调用setStroke()方法设置笔画的属性,例如改变线条的粗细、使用实线还是虚线、定义线段端点的形状、风格等
Java使用Font类封装了字体的大小、样式等属性
Graphics2D类提供了drawString()方法,使用该方法可以实现图形上下文的文本绘制,从而实现在图片上显示文字的功能
private Shape rect; // 矩形对象
private Font font; // 字体对象
private Date date; // 当前日期对象
rect = new Rectangle2D.Double(10, 10, 200, 80);
font = new Font("宋体", Font.BOLD, 16);
date = new Date();
Graphics2D g2 = (Graphics2D) g;
g2.setColor(Color.GREEN); // 设置当前绘图颜色
g2.fill(rect); // 填充矩形
g2.setColor(Color.BLUE); // 设置当前绘图颜色
g2.setFont(font); // 设置字体
g2.drawString("现在时间是", 20, 30); // 绘制文本
g2.drawString(String.format("%tr", date), 50, 60); // 绘制时间文本
4、绘制图片及图片处理
绘图类不仅可以绘制图形和文本,还可以使用drawImage()方法将图片资源显示到绘图上下文中,而且可以实现各种特效处理,例如图片的缩放、翻转等。下面主要介绍如何显示图片,语法如下所示:
drawImage(Image img, int x, int y, ImageObserver observer)
Image img;
URL imgUrl = DrawImage.class.getResource("img.jpg");// 获取图片资源的路径
img = Toolkit.getDefaultToolkit().getImage(imgUrl); // 获取图片资源
Graphics2D g2 = (Graphics2D) g;
g2.drawImage(img, 0, 0, this); // 显示图片
a.放大与缩小
想要实现图片的放大与缩小则需要使用它的重载方法,语法如下所示:
drawImage(Image img, int x, int y, int width, int height, ImageObserver observer)
该方法将img图片显示在x、y指定的位置上,并指定图片的宽度和高度属性。方法中涉及到的参数说明如下表所示。
b.图片翻转
图像的翻转需要使用drawImage()方法的另一个重载方法,语法如下所示:
drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, ImageObserver observer)
c.图片旋转
图像的旋转需要调用Graphics2D类的rotate()方法,该方法将根据指定的弧度旋转图像,语法如下所示:
rotate(double theta)
theta:旋转的弧度
g2.rotate(Math.toRadians(15));
g2.drawImage(img, 70, 10, 300, 200, this);
// 绘制指定大小的图片
d.图片倾斜
可以使用Graphics2D类提供的shear()方法设置绘图的倾斜方向,从而实现使图像倾斜的效果,语法如下所示:
shear(double shx, double shy)
shx:水平方向的倾斜量
shy:垂直方向的倾斜量
Graphics2D g2 = (Graphics2D) g;
g2.shear(0.3, 0);
g2.drawImage(img, 0, 0, 300, 200, this);// 绘制指定大小的图片