Java图像编程之:Graphics

一、概念介绍

1、Java图像编程的核心类

Java图像编程的核心类包括:

  1. BufferedImage:用于表示图像的类,可以进行像素级的操作。
  2. Image:表示图像的抽象类,是所有图像类的基类。
  3. ImageIcon:用于显示图像的类,可以将图像嵌入到Swing组件中。
  4. ImageIO:用于读取和写入图像文件的类。
  5. Graphics:用于进行图像绘制操作的抽象类,可以绘制直线、矩形、椭圆等图形。
  6. Graphics2D:继承自Graphics类,提供了更多的绘制方法和功能,可以进行更高级的图像绘制操作。
  7. Color:用于表示颜色的类,可以设置图像的颜色。
  8. Font:用于表示字体的类,可以设置图像的字体样式。

这些类是Java图像编程中常用的核心类,可以帮助你进行图像的处理、显示和绘制操作。

2、Graphics简介

java.awt.Graphics提供了绘制图形和图像的功能。它是Abstract Window Toolkit(AWT)的一部分,用于创建基于图形的用户界面。

通过使用Graphics类,您可以在屏幕上绘制直线、矩形、椭圆、多边形等基本形状,并填充它们的颜色。您还可以绘制图像、文本和其他复杂的图形。

要使用Graphics类,您需要获取一个Graphics对象。您可以通过调用组件的getGraphics()方法来获取该对象,例如JPanel、JFrame、BufferedImage。然后,您可以使用Graphics对象的各种方法来绘制您想要的图形。

除了绘制图形,Graphics类还提供了其他一些方法,如设置颜色、字体和渲染提示等。

3、Graphics主要方法

方法名描述
void clearRect(int x, int y, int width, int height)清除指定矩形区域的像素
void drawArc(int x, int y, int width, int height, int startAngle, int arcAngle)绘制一个圆弧
void drawImage(Image img, int x, int y, ImageObserver observer)在指定位置绘制指定的图像
void drawLine(int x1, int y1, int x2, int y2)绘制一条直线
void drawOval(int x, int y, int width, int height)绘制一个椭圆
void drawPolygon(int[] xPoints, int[] yPoints, int nPoints)绘制一个多边形
void drawRect(int x, int y, int width, int height)绘制一个矩形
void drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight)绘制一个圆角矩形
void drawString(String str, int x, int y)在指定位置绘制给定字符串
void fillArc(int x, int y, int width, int height, int startAngle, int arcAngle)填充一个圆弧
void fillOval(int x, int y, int width, int height)填充一个椭圆
void fillPolygon(int[] xPoints, int[] yPoints, int nPoints)填充一个多边形
void fillRect(int x, int y, int width, int height)填充一个矩形
void fillRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight)填充一个圆角矩形
Color getColor()返回当前颜色
Font getFont()返回当前字体
void setColor(Color c)设置颜色
void setFont(Font font)设置字体

这些是Graphics类中最常用的一些方法,可以用于绘制基本形状、图像和文本,并设置颜色和字体等属性。

二、代码示例

以下通过示例代码,演示几个主要的方法使用。

注意:原点坐标是左上角,x轴向右增加,y轴向下增加

1、常用方法演示

ImageUtil工具类

public class ImageUtil {public static BufferedImage createImage() {int imageWidth = 500;int imageHeight = 500;return new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_INT_ARGB);}/*** 将图片保存到指定位置*/public static void saveImage2File(BufferedImage image, String fileLocation, String fileName) {try {File file = new File(fileLocation);if (!file.exists()) {file.mkdir();}FileOutputStream fos = new FileOutputStream(fileLocation + fileName);BufferedOutputStream bos = new BufferedOutputStream(fos);ImageIO.write(image, "png", fos);bos.close();} catch (Exception e) {e.printStackTrace();}}
}

使用Graphics图像工具类

    public static void test() {BufferedImage bufferedImage = ImageUtil.createImage();Graphics g = bufferedImage.getGraphics();//设置浅灰色,并绘制背景g.setColor(new Color(0XEEEEEE));g.fillRect(0,0,500,500);//设置颜色g.setColor(Color.pink);//填充圆形// x、y 绘制的左上角坐标,width、height 椭圆的宽、高,如果宽高一致就是圆型g.fillOval(10, 50, 100, 100);//设置颜色g.setColor(Color.ORANGE);// 绘制矩形// x、y 绘制的左上角坐标,width、height 矩形的宽、高g.drawRect(50, 20, 100, 100);// 填充绘制圆角矩形// x、y 绘制的左上角坐标,width、height 矩形的宽、高// arcWidth–四个角处圆弧的水平直径,arcHeight–四个角处圆弧的垂直直径。g.fillRoundRect(50, 180, 100, 100,20,20);//设置颜色g.setColor(Color.RED);// 绘制圆弧// x、y 绘制的左上角坐标,width、height 宽、高,startAngle 开始的角度,arcAngle 绘制的总角度,绘制角度从右到左计算g.drawArc(10, 300, 100, 100, 30, 180);//设置颜色g.setColor(Color.BLUE);// 填充绘制多边形// xPoints、yPoints x轴和y轴的坐标数组,分别一一对应组成数个点,nPoints 要绘制的点数int[] xPoints = new int[]{200, 300, 400, 300};int[] yPoints = new int[]{110, 210, 110, 10};int nPoints = 4;g.fillPolygon(xPoints, yPoints, nPoints);//设置颜色g.setColor(Color.YELLOW);// 填充3d矩形g.fill3DRect(300, 300, 100, 100, true);//画一个线框//设置颜色g.setColor(Color.DARK_GRAY);// 设置字体Font font = new Font("微软雅黑", Font.BOLD, 38);g.setFont(font);// 写文字g.drawString("写第一标题", 10, 450);ImageUtil.saveImage2File(bufferedImage, "d:/temp/image/", "g01.png");}

在这里插入图片描述

2、设置裁剪区域

    public static void test0() {BufferedImage bufferedImage = ImageUtil.createImage();Graphics g = bufferedImage.getGraphics();//设置浅灰色,并绘制背景g.setColor(new Color(0XEEEEEE));g.fillRect(0,0,500,500);//设置颜色g.setColor(Color.pink);//填充圆形g.fillOval(20, 20, 100, 100);//设置颜色g.setColor(Color.CYAN);//设置裁剪区域,设置以后,后续的所有绘制都只会在此区域内有效g.setClip(100, 100, 200, 200);// 在裁剪区域填充圆型g.fillOval(150, 150, 200, 200);ImageUtil.saveImage2File(bufferedImage, "d:/temp/image/", "g00.png");}

在这里插入图片描述

3、原点坐标转换

    public static void test2() {BufferedImage bufferedImage = ImageUtil.createImage();Graphics g = bufferedImage.getGraphics();//设置浅灰色,并绘制背景g.setColor(new Color(0XEEEEEE));g.fillRect(0,0,500,500);//设置颜色g.setColor(Color.pink);//重新设置坐标原点,新绘制的图形将以此坐标作为原点g.translate(-100, -100);//填充圆形,原本应该在中间,经上述转换后,向左上角移动了g.fillRect(200, 200, 100, 100);ImageUtil.saveImage2File(bufferedImage, "d:/temp/image/", "g03.png");}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/169818.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络爬虫代理ip有什么好处?爬虫工作使用代理IP有哪些优势?

在爬虫工作中,使用代理IP有很多好处,可以帮助爬虫程序更加高效地完成任务。以下是使用代理IP的几个优势: 1. 增加匿名性 使用代理IP可以隐藏爬虫程序的真正IP地址,增加匿名性,避免被目标网站封禁。通过代理IP&#xff…

ida81输入密码验证算法分析以及破解思路

本文分析了ida81对输入密码的验证流程,分别对输入密码到生成解密密钥、密码素材的生成过程以及文件数据的加密过程这三个流程进行分析,并尝试找一些可利用的破绽。很遗憾,由于水平有限,目前也只是有个思路未能完全实现&#xff0c…

【中间件篇-Redis缓存数据库02】Redis高级特性和应用(慢查询、Pipeline、事务、Lua)

Redis高级特性和应用(慢查询、Pipeline、事务、Lua) Redis的慢查询 许多存储系统(例如 MySQL)提供慢查询日志帮助开发和运维人员定位系统存在的慢操作。所谓慢查询日志就是系统在命令执行前后计算每条命令的执行时间,当超过预设阀值,就将这条命令的相关…

微信聊天,收到二维码图片就自动帮你提取出来的方法

10-3 如果你是二维码收集的重度用户,那我非常推荐你好好阅读本文,也许可以帮你解决你的问题,比如做网推的人,需要常年混迹在各种微信群,那如何在各个微信群中收集到群友分享出来的二维码,并且要立即保存出…

故障诊断模型 | Maltab实现ELM极限学习机的故障诊断

文章目录 效果一览文章概述模型描述源码设计参考资料效果一览 文章概述 故障诊断模型 | Maltab实现ELM极限学习机的故障诊断 模型描述 在机器学习领域,我们常常需要通过训练数据来学习一个函数模型,以便在未知的数据上进行预测或分类。传统的神经网络模型需要大量的参数调整和…

计算机毕业设计选题推荐-校园交流平台微信小程序/安卓APP-项目实战

✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

9.spark自适应查询-AQE之动态调整Join策略

目录 概述动态调整Join策略原理实战 动态优化倾斜的 Join原理实战 概述 broadcast hash join 类似于 Spark 共享变量中的广播变量,Spark join 如果能采取这种策略,那join 的性能是最好的 自适应查询AQE(Adaptive Query Execution) 动态调整Join策略 原…

简单漂亮的登录页面

效果图 说明 开发环境&#xff1a;vue3&#xff0c;sass 代码 <template><div class"container"><div class"card-container"><div class"card-left"><span><h1>Dashboard</h1><p>Lorem ip…

Python 的 datetime 模块

目录 简介 一、date类 &#xff08;一&#xff09;date 类属性 &#xff08;二&#xff09;date 类方法 &#xff08;三&#xff09;实例属性 &#xff08;四&#xff09;实例的方法 二、time类 &#xff08;一&#xff09;time 类属性 &#xff08;二&#xff09;tim…

vscode 访问本地或者远程docker环境

1、vscode 访问docker本地环境 直接点击左下角连接图标&#xff0c;弹出选项可以选择容器&#xff0c;只要容器在本地运行者&#xff0c;选择attach可以看到运行中的容器可以选择&#xff0c;选择其中需要选择的就行 ## 运行容器&#xff0c;可以-d后台运行都可以 docker run…

【数据结构初阶】顺序表

各位读者老爷好&#xff0c;又见面了哈&#xff01;鼠鼠我呀现在基于C语言浅浅介绍一下数据结构初阶中的顺序表&#xff0c;希望对你有所帮助&#xff01; 目录 1.线性表 2.顺序表 2.1概念即结构 2.2动态顺序表接口的实现 2.2.1定义顺序表 2.2.2初始化 2.2.3销毁 2.2…

asp.net外卖网站系统VS开发mysql数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net外卖网站系统 是一套完善的web设计管理系统&#xff0c;系统采用mvc模式&#xff08;BLLDALENTITY&#xff09;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为mysql&#xff0c;使用c#语…