Java学习之绘图

    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类可以创建任何颜色的对象

Java2DGraphics2D类可以调用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图片显示在xy指定的位置上,并指定图片的宽度和高度属性。方法中涉及到的参数说明如下表所示。

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);// 绘制指定大小的图片

  • 13
    点赞
  • 105
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值