Java实现图像绘制

简介: Java实现图像绘制

@[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);// 绘制指定大小的图片
相关文章
|
27天前
|
存储 XML Java
如何在 Java 中将常见文档转换为 PNG 图像数组
如何在 Java 中将常见文档转换为 PNG 图像数组
13 1
|
4月前
|
数据采集 安全 Java
Java Selenium WebDriver:代理设置与图像捕获
Java Selenium WebDriver:代理设置与图像捕获
|
5月前
|
Java 计算机视觉
图像处理之图像纹理添加效果(利用JAVA 2D纹理画笔)
图像处理之图像纹理添加效果(利用JAVA 2D纹理画笔)
51 8
|
6月前
|
数据采集 机器学习/深度学习 Java
数据猎手:使用Java和Apache HttpComponents库下载Facebook图像
本文介绍了如何使用Java和Apache HttpComponents库从Facebook获取图像数据。通过设置爬虫代理IP以避免限制,利用HttpClient发送请求,解析HTML找到图像链接,然后下载并保存图片。提供的Java代码示例展示了实现过程,包括创建代理配置、线程池,以及下载图片的逻辑。注意,实际应用需根据Facebook页面结构进行调整。
数据猎手:使用Java和Apache HttpComponents库下载Facebook图像
|
6月前
|
文字识别 Java Maven
java调用tess4j识别图像中的文字
java调用tess4j识别图像中的文字
342 3
|
6月前
|
算法 Python Java
Java每日一练(20230414) Pow(x, n) 、旋转图像、买卖股票的最佳时机 IV
Java每日一练(20230414) Pow(x, n) 、旋转图像、买卖股票的最佳时机 IV
40 0
Java每日一练(20230414) Pow(x, n) 、旋转图像、买卖股票的最佳时机 IV
|
11月前
|
机器学习/深度学习 Java
48. 旋转图像 --力扣 --JAVA
​ 给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 ​
52 0
|
存储 算法 Java
GIF图像动态生成-JAVA后台生成
本文简要讲述了GIF图像知识,并且以JAVA技术为例,介绍了后台生成GIF的技术,并提供较详细的代码示例,希望对您有帮助。最后怀念因新冠感染去世的GIF的发明者,斯蒂芬•威尔海特。
413 0
GIF图像动态生成-JAVA后台生成
|
机器学习/深度学习 算法 Java
Java使用OpenCV进行图像操作
OpenCV是一个开源的计算机视觉库,它提供了一系列丰富的图像处理和计算机视觉算法,包括图像读取、显示、滤波、特征检测、目标跟踪等功能。
3622 2
|
编解码 前端开发 JavaScript
Java + SikuliX 基于图像实现自动化测试
一个好玩的图像识别自动化测试工具
593 1
Java + SikuliX 基于图像实现自动化测试