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

Java Graphics2D 基础图形绘制详解

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

栈溢出发布于 2025/2/3更新于 2026/6/518 浏览
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. 圆弧、闭合圆弧、扇形
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Flutter upnp_client 组件鸿蒙适配:跨设备发现与投屏控制
  • XGBoost 机器学习实战指南:从安装到模型调优
  • Linux 是什么?
  • Java API 文档中文版获取与使用说明
  • 项目实战:使用 three.js+vue3+ts 完成 VR 全景看房应用
  • Python 中绕过 JSON 默认排序规则的进阶技巧
  • 前缀和算法实战:从一维到二维及哈希结合应用
  • 常用大模型工具及入门指南
  • CoPaw 国产 AI 数字搭档部署与定制实战指南
  • 利用 NAS 部署智能家居网关实现全屋智能控制
  • 通义千问 Qwen 2.5 闭源性能赶超 GPT-4 Turbo,开源模型超越 Llama-3-70B
  • 大模型、通用大模型与企业及垂直大模型的概念辨析
  • Python 在 CentOS 系统环境部署与配置实战指南
  • 宇树机器人 G1 二次开发:基于 FAST_LIO 的建图与 RViz 配置教程
  • 5 个实用的 AI 提示词工具网站推荐
  • 基于机器学习的农产品价格数据分析与预测可视化系统设计与实现
  • Python 版 Claude Code SDK 实战:从安装到自定义工具开发
  • GitHub Copilot Agent Skills 深度解析:构建跨项目 AI 专属工具箱
  • Debian 系统 libwebkit2gtk-4.1-0 安装后无法加载问题排查
  • Python 数据分析基础:NumPy 核心用法详解

相关免费在线工具

  • 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