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");
    }

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算机中丢失msvcr120.dll文件怎么修复?找不到msvcr120.dll五种完美修复方案

今天我想和大家分享的是关于“msvcr120.dll丢失的问题的5个解决方法”。在我们日常的工作生活中,或许大家都曾遇到过这样的问题,那么,了解它的解决方法是非常必要的。 首先,让我们来了解一下msvcr120.dll是什么文件。简单来说&am…

“艾迪-东软杯”第六届武汉理工大学新生程序设计竞赛

A.Capoos Acronym Zero 题目描述 yz 和他的朋友 ea 和 zech 一起养了一群 Capoo。 这些 Capoo 非常聪明,但不知道为什么,它们并没有从三人那里学到怎么写算法题,而是出于某种原因开始研究语言学,并发明了一套自己的暗语。这门暗语…

二分图判定和二分图最大匹配

1.二分图的定义 二分图是一种特殊的无向图,它的节点可以被划分为两个互不相交的集合,使得同一集合中的任意两个节点之间没有边相连,而不同集合中的节点之间都有边相连。 换句话说,如果一个无向图可以被划分为两个集合&#xff0…

Keil文本对齐

摘要:通常我们写代码的时候,尤其是缩进和{}的使用,很多都需要自己手动去调整,如果有一个自动格式化代码的工具,每次编辑完代码,然后一键给将代码格式化,即省时又美观。为了解决这个问题&#xf…

面向对象高级

本期对应知识库:(持续更新中!) 面向对象高级 (yuque.com) ​​​​​​​尚硅谷_宋红康_对象内存解析.pptx static 适用于公用变量 开发中,变量 经常把一些常量设置为静态static 例如 PI 方法 经常把工具类中的方…

Deepsort项目详解

一、目标追踪整体代码 代码目录如下图所示: 、 追踪相关代码: 检测相关代码和权重 调用 检测 和 追踪的代码: 首先代码分为三个部分: 目标追踪的相关代码和权重目标检测相关代码和权重,这里用的是yolov5.5目标检…

Thinkphp8 - 连接多个数据库

// 数据库连接配置信息connections > [mysql > [// 数据库类型type > mysql,// 服务器地址hostname > 127.0.0.1,// 数据库名database > thinkphp,// 用户名username > env(DB_USER, root),// 密码password >…

layui 表格(table)合计 取整数

第一步 开启合计行 是否开启合计行区域 table.render({elem: #myTable, url: ../baidui/, page: true, cellMinWidth: 100,totalRow:true,cols: [[ //表头//{ type: checkbox },{ type: checkbox,totalRowText: "合计" },//合计行区域{ field: id, align: center,…

【0基础学Java第九课】-- 抽象类和接口

9. 抽象类和接口 9.1 抽象类9.1.1 抽象类概念9.1.2 抽象类语法9.1.3 抽象类的特性9.1.4 抽象类的作用 9.2 接口9.2.1 接口的概念9.2.2 语法规则9.2.3 接口使用9.2.4 接口特性9.2.5 实现多个接口9.2.6 接口的继承9.2.9 抽象类和接口的区别 9.3 Object类9.3.1 获取对象方法9.3.1 …

基于springboot实现驾校管理系统项目【项目源码】计算机毕业设计

基于springboot实现驾校管理系统演示 JAVA简介 JavaScript是一种网络脚本语言,广泛运用于web应用开发,可以用来添加网页的格式动态效果,该语言不用进行预编译就直接运行,可以直接嵌入HTML语言中,写成js语言&#xff0…

小H靶场学习笔记:DC-2

DC-2 Created: November 10, 2023 3:01 PM Tags: WordPress, git提权, rbash逃逸 Owner: 只会摸鱼 靶场过程 信息收集 扫描存活主机,找到靶机ip:192.168.199.131(本机是192.168.199.129) 扫描端口开放协议 发现有80端口和77…

电路设计之36V 自动断电和防浪涌电路

1. 电路图纸 2. 解释防浪涌功能怎么实现的 1. 首先当电源上电的一瞬间是 电容C1 是相当于短路的。 (电容的充电状态。电容充电相当于短路状态) 2. 当上电的一瞬间是有 浪涌的。 3.当上电的瞬间有浪涌的,此时电容C1 相当于短路,所…

Java学习_对象

对象在计算机中的执行原理 类和对象的一些注意事项 this关键字 构造器 构造器是一种特殊的方法 : 特殊之处在于,名字必须与所在类的名字一样,而且不能写返回值类型 封装 封装的设计规范:合理隐藏、合理暴露 实体类 成员变量和局部变量的区别 …

有源RS低通滤波

常用的滤波电路有无源滤波和有源滤波两大类。若滤波电路元件仅由无源元件(电阻、电容、电感)组成,则称为无源滤波电路。无源滤波的主要形式有电容滤波、电感滤波和复式滤波(包括倒L型、LC滤波、LCπ型滤波和RCπ型滤波等)。若滤波电路不仅有无…

【Redis】list列表

上一篇: String 类型 https://blog.csdn.net/m0_67930426/article/details/134362606?spm1001.2014.3001.5501 目录 Lpush LRange Rpush Lpop Rpop Lindex Ltrim Lset 列表不存在的情况 如果列表存在 Linsert ​编辑 在………之前插入 在……后面插入…

UE地形系统材质混合实现和Shader生成分析(UE5 5.2)

前言 随着电脑和手机硬件性能越来越高,游戏越来越追求大世界,而大世界非常核心的一环是地形系统,地形系统两大构成因素:高度和多材质混合,此篇文章介绍下UE4/UE5 地形的材质混合方案----基于WeightMap混合。 材质层 …

总结:利用JDK原生命令,制作可执行jar包与依赖jar包

总结:利用JDK原生命令,制作可执行jar包与依赖jar包 一什么是jar包?二制作jar包的工具:JDK原生自带的jar命令(1)jar命令注意事项:(2)jar包清单文件创建示例:&a…

Yolo自制detect训练

Install 把代码拉下来 GitHub - ultralytics/yolov5 at v5.0 然后 pip install -r requirements.txt 安装完了,运行一下detect.py即可 结果会保存在对应的目录下 Intro ├── data:主要是存放一些超参数的配置文件(这些文件(yaml文件)是用来配置训练集和测试集还有验…

【Redis】set 集合

上一篇:list 列表 https://blog.csdn.net/m0_67930426/article/details/134364315?spm1001.2014.3001.5501 目录 Sadd Smembers Sismember Scard Srem ​编辑Srandomember Spop Smove 集合类 Sdiff Sinter Sunion 官网 https://redis.io/commands/?…

01-Spring中的工厂模式

工厂模式 工厂模式的三种形态: 工厂模式是解决对象创建问题的属于创建型设计模式,Spring框架底层使用了大量的工厂模式 第一种:简单工厂模式是工厂方法模式的一种特殊实现,简单工厂模式又叫静态工厂方法模式不属于23种设计模式之一第二种:工厂方法模式…