跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Javajava

Java Graphics2D 基础图形绘制详解

Java Graphics2D 类提供了丰富的图形绘制能力,支持点、线、曲线、矩形、椭圆及圆弧等基本形状。通过继承 Shape 接口并设置颜色属性,开发者可在 BufferedImage 上完成渲染。示例代码演示了 Line2D、QuadCurve2D、CubicCurve2D、Rectangle2D、RoundRectangle2D、Ellipse2D 及 Arc2D 的具体用法。坐标系统以左上角为原点 (0,0)。

栈溢出发布于 2025/2/3更新于 2026/10/2591 浏览
Java Graphics2D 基础图形绘制详解

Java Graphics2D 基础图形绘制详解

使用 Java 进行图形处理时,Graphics2D 是核心 API。以下介绍从简单到复杂图形的绘制方法及实例代码。

1. Point

Point 代表图中的一个点,用(x,y)表示。

// int Point point = new Point(0, 0);
// double Point2D point1 = new Point2D.Double(1D, 1D);
// float Point2D point2 = new Point2D.Float(1.0F, 1.0F);

2. Line

Line2D 表示坐标空间中的线段实现。

Line2D line2D = new Line2D.Double(0D, 0D, 100D, 100D);
Line2D line2D1 = new Line2D.Float(0F, 0F, 100F, 100F);

创建一条线代码实例:

BufferedImage image = loadImage();
Graphics2D graphics2D = image.createGraphics();
graphics2D.setColor(Color.RED);
// 代表 从坐标 (1,1) 到 (100,100) 坐标画一条红线
graphics2D.draw(new Line2D.Double(1, 1, 100, 100));
graphics2D.dispose();
image.flush();
ImgUtil.write(image, new File(SAVE_FILE_PATH + "line.png"));

3. 二次曲线段

QuadCurve2D 能够创建二次参数曲线段。二次曲线由两个端点和一个控制点定义。

该类实现 Shape 接口。此类表示 (x, y) 坐标空间中的二次参数曲线段。有几种 setCurve 方法用于指定曲线的两个端点和一个控制点。

BufferedImage image = loadImage();
Graphics2D graphics2D = image.createGraphics();
graphics2D.setColor(Color.RED);
QuadCurve2D q = new QuadCurve2D.Float();
double x1 = 10;
double y1 = 10;
double ctrlx = 10;
double ctrly = 60;
double x2 = 100;
double y2 = 10;
q.setCurve(x1, y1, ctrlx, ctrly, x2, y2);
graphics2D.draw(q);
graphics2D.dispose();
image.flush();
ImgUtil.write(image, new File(SAVE_FILE_PATH + "Curve.png"));

4. 三次曲线段

CubicCurve2D 实现 Shape 接口。表示 (x, y) 坐标空间中的三次参数化曲线段。

BufferedImage image = loadImage();
Graphics2D graphics2D = image.createGraphics();
graphics2D.setColor(Color.RED);
CubicCurve2D c = new CubicCurve2D.Double();
c.setCurve(10, 40, 30, 5, 60, 40, 100, 30);
graphics2D.draw(c);
graphics2D.dispose();
image.flush();
ImgUtil.write(image, new File(SAVE_FILE_PATH + "Curve2.png"));

5. 长方形

绘制长方形使用 Rectangle2D 绘制,该类扩展了类 RectangularShape。

BufferedImage image = loadImage();
Graphics2D graphics2D = image.createGraphics();
graphics2D.setColor(Color.RED);
int x = 10;
int y = 10;
int rectWidth = 100;
int rectHeight = 50;
graphics2D.draw(new Rectangle2D.Double(x, y, rectWidth, rectHeight));
graphics2D.dispose();
image.flush();
ImgUtil.write(image, new File(SAVE_FILE_PATH + "Rectangle.png"));

6. 圆角矩形

通过 RoundRectangle2D 实现圆角矩形绘制,也继承至 RectangularShape。

BufferedImage image = loadImage();
Graphics2D graphics2D = image.createGraphics();
graphics2D.setColor(Color.RED);
int x = 10;
int y = 10;
int rectWidth = 100;
int rectHeight = 50;
double arcw = 10;
double arch = 10;
graphics2D.draw(new RoundRectangle2D.Double(x, y, rectWidth, rectHeight, arcw, arch));
graphics2D.dispose();
image.flush();
ImgUtil.write(image, new File(SAVE_FILE_PATH + "RoundRectangle2D.png"));

7. 椭圆、圆

绘制椭圆、圆由 Ellipse2D 类实现。

BufferedImage image = loadImage();
Graphics2D graphics2D = image.createGraphics();
graphics2D.setColor(Color.RED);
int x = 1;
int y = 1;
int rectWidth = 100;
int rectHeight = 100;
// 绘制圆
graphics2D.draw(new Ellipse2D.Double(x, y, rectWidth, rectHeight));
// 绘制椭圆
graphics2D.draw(new Ellipse2D.Double(x + 150, y + 150, rectWidth, rectHeight / 2));
graphics2D.dispose();
image.flush();
ImgUtil.write(image, new File(SAVE_FILE_PATH + "Ellipse2D.png"));

8. 圆弧、闭合圆弧、扇形

通过 Arc2D 类绘制实现圆弧、闭合圆弧、扇形。

BufferedImage image = loadImage();
Graphics2D graphics2D = image.createGraphics();
graphics2D.setColor(Color.RED);
int x = 10;
int y = 10;
int rectWidth = 100;
int rectHeight = 100;
int start = 90;
int extent = 135;
// 圆弧
graphics2D.draw(new Arc2D.Double(x, y, rectWidth, rectHeight, 90, 135, Arc2D.OPEN));
// 圆弧闭合
graphics2D.draw(new Arc2D.Double(x + 50, y + 50, rectWidth, rectHeight, 90, 135, Arc2D.CHORD));
// 扇形
graphics2D.draw(new Arc2D.Double(x + 100, y + 100, rectWidth, rectHeight, 90, 135, Arc2D.PIE));
graphics2D.dispose();
image.flush();
ImgUtil.write(image, new File(SAVE_FILE_PATH + "Arc2D.png"));

目录

  1. Java Graphics2D 基础图形绘制详解
  2. 1. Point
  3. 2. Line
  4. 3. 二次曲线段
  5. 4. 三次曲线段
  6. 5. 长方形
  7. 6. 圆角矩形
  8. 7. 椭圆、圆
  9. 8. 圆弧、闭合圆弧、扇形

更多推荐文章

查看全部
  • AI 大模型入门教程:从零基础到精通
  • 运营商高管调整与工信部人形机器人标准化委员会成立分析
  • Vue2.x 使用 SVG 实现不封闭圆形进度条及组件封装
  • Java Web 大文件分块上传与断点续传实现方案
  • 2026 年三大 AI 写作工具测评:如何消除英文 AI 痕迹
  • Web 端即时通讯聊天的三种加密算法实现方案
  • Python 常用集成开发环境(IDE)功能对比与选择指南
  • 低代码构建连锁门店管理系统:标准化与高效管控
  • 在 Cursor 中配置和使用 MCP 服务
  • 海康视频插件浏览器弹窗及灰屏问题解决方案
  • Spring Boot 1.5+ @ConfigurationProperties 移除 location 属性后的替代方案
  • 机器学习回归算法:线性回归与逻辑回归
  • 前端请求后端接口 404/405/500 状态码排查与解决指南
  • Spring Boot Starter 自定义开发:构建企业级组件库
  • Ubuntu 22.04 下基于 ROS2 Humble 的 PX4 无人机仿真环境搭建
  • Qwen3-VL WebUI 本地部署与核心功能实战指南
  • Electron 前端跨平台桌面应用开发快速入门教程
  • Z-Image Turbo 本地部署与使用指南
  • KWDB 运维实战:用 SQL 融合 Metrics 与 CMDB 数据
  • 贪心算法核心思想与 LeetCode 经典例题解析

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online