19.java绘图

A.Graphics类

   Graphics类是java.awt包中的一个类,它用于在图形用户界面(GUI)或其他图形应用程序中进行绘制。该类通常与Componentpaint方法一起使用,以在组件上进行绘制操作。

        一些Graphics类的常见用法和方法:

在组件上绘制图形:

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;class MyPanel extends JPanel {@Overrideprotected void paintComponent(Graphics g) {super.paintComponent(g);// 绘制矩形g.drawRect(50, 50, 100, 100);// 绘制填充的矩形g.setColor(Color.BLUE);g.fillRect(200, 50, 100, 100);}
}public class MyFrame extends JFrame {public MyFrame() {add(new MyPanel());setSize(300, 200);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setLocationRelativeTo(null);setVisible(true);}public static void main(String[] args) {new MyFrame();}
}

B.Graphics2D

  Graphics2D类是Java中java.awt包中的一个类,它是Graphics类的子类,提供了更丰富和高级的图形绘制功能。Graphics2D类支持矢量图形和更高级的绘图操作,与Graphics相比,它提供了更多的控制选项和更丰富的功能。

  Graphics2D类的一些常见用法

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JFrame;
import javax.swing.JPanel;class MyPanel extends JPanel {@Overrideprotected void paintComponent(Graphics g) {super.paintComponent(g);// 将Graphics对象转换为Graphics2D对象Graphics2D g2d = (Graphics2D) g;// 绘制直线g2d.drawLine(50, 50, 150, 150);// 绘制圆形g2d.setColor(Color.RED);g2d.drawOval(200, 50, 100, 100);}
}public class MyFrame extends JFrame {public MyFrame() {add(new MyPanel());setSize(300, 200);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setLocationRelativeTo(null);setVisible(true);}public static void main(String[] args) {new MyFrame();}
}

C.绘制一个图像

        可以使用GraphicsGraphics2D对象来绘制图像

D.绘制一个图形

例题1

例题2

绘制颜色与画笔属性

        以使用GraphicsGraphics2D对象来绘制颜色和定义画笔属性

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JFrame;
import javax.swing.JPanel;class ColorAndStrokePanel extends JPanel {@Overrideprotected void paintComponent(Graphics g) {super.paintComponent(g);// 将Graphics对象转换为Graphics2D对象Graphics2D g2d = (Graphics2D) g;// 设置颜色g2d.setColor(Color.BLUE);// 绘制填充的矩形g2d.fillRect(20, 20, 80, 80);// 设置颜色g2d.setColor(Color.RED);// 设置画笔宽度g2d.setStroke(new BasicStroke(5));// 绘制矩形边框g2d.drawRect(120, 20, 80, 80);}
}public class ColorAndStrokeExample extends JFrame {public ColorAndStrokeExample() {add(new ColorAndStrokePanel());setSize(250, 150);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setLocationRelativeTo(null);setVisible(true);}public static void main(String[] args) {new ColorAndStrokeExample();}
}

设置颜色

使用 Color 类可以创建任意颜色的对象,不用担心平台是否支持该颜色,因为 Java 以跨平台和与硬件无关的方式支持颜色管理。创建 Color 对象的构造方法有如下两种:

Color col = new Color(int r, int g, int b)
Color col = new Color(int rgb)

设置画笔

Color类提供了一组预定义的颜色常量,

这些预定义的颜色常量包括但不限于:

  • Color.RED
  • Color.GREEN
  • Color.BLUE
  • Color.YELLOW
  • Color.ORANGE
  • Color.PINK
  • Color.CYAN
  • Color.MAGENTA
  • Color.BLACK
  • Color.WHITE
  • Color.GRAY
  • Color.LIGHT_GRAY
  • Color.DARK_GRAY

绘制文本

Java绘图类也可以用来绘制文本内容,且可以在绘制设置字体的样式、大小等。

设置字体

        可以使用Font类来设置字体的样式、大小和其他属性

  • Font类的构造函数接受三个参数:字体名称("Arial")、字体样式(Font.PLAINFont.BOLDFont.ITALIC、或它们的组合)、以及字体大小。
  • 使用g2d.setFont(font)方法来设置当前绘图上下文的字体。
  • g2d.drawString(text, x, y)方法用于在指定位置绘制文本。

E.显示文字

例题3

F.显示图片

drawimage(lmage img, int x, int y, lmageObserver observer)

        绘图类不仅可以绘制图形和文本,还可以使用 drawImage0方法将图片资源显示到绘图上下文中,而且可以实现各种特效处理,如图片的缩放、翻转等。有关图像处理的知识将在 19.6 节讲解,本节主要讲解如何显示图片。

例题4

G.图像处理

        开发高级的桌面应用程序,必须掌握一些图像处理与动画制作的技术,如在程序中显示统计图,销售趋势图、动态按钮等

放大与缩小

drawmage(lmage img, int x, int y, int width, int height, lmageObserver observer)

使用了 drawImage0方法将图片以原始大小显示在窗体中,要想实现图的放大与缩小,则需要使用它的重载方法。

例题5

图像翻转

        水平垂直翻转

图像旋转

        图像旋转

        theta 是指旋转的弧度
说明rotate0方法只接受旋转的弧度作为参数,可以使用 Math 类的 toRadians0)方法将角度转换为弧toRadians(方法接受角度值作为参数,返回值是转换完毕的孤度值。

rotate(double theta)

        需要调用 Graphics2D 类的 rotate0方法,该方法将根据指定的弧度旋转图像。

图像的翻转

需要使用 drawImage0方法的另一个重载方法。

drawimage(lmage img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, lmageObserver observer

图像倾斜

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

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

相关文章

Flask维护者:李辉

Flask维护者:李辉, 最近看b站的flask相关,发现了这个视频:[PyCon China 2023] 濒危 Flask 扩展拯救计划 - 李辉_哔哩哔哩_bilibili 李辉讲他在维护flask之余,开发了apiflask这个依托flask的框架。GitHub - apiflask/a…

如何通过 SSH 访问 VirtualBox 的虚机

VirtualBox 是一款免费虚机软件。在用户使用它安装了 linux 以后,它默认只提供了控制台的管理画面。 直接使用控制台管理 Linux 没有使用诸如 putty 或者 vscode 这样的 ssh 远程管理工具方便。那么可不可以直接使用 ssh 访问 VirtualBox 上的 Linux 呢&#xff1f…

【Spark精讲】Spark作业执行原理

基本流程 用户编写的Spark应用程序最开始都要初始化SparkContext。 用户编写的应用程序中,每执行一个action操作,就会触发一个job的执行,一个应用程序中可能会生成多个job执行。一个job如果存在宽依赖,会将shuffle前后划分成两个…

同时安装5.7和8.0版本的MySQL

MySQL57安装 下载mysql-5.7.38-winx64.msi,安装管理员身份进入到安装文件夹的bin目录下 如何以管理员身份进入D盘 D:cd D:\Programs\MySQL\MySQL Server 5.7\bin把my.ini复制到mysql5.7安装目录下后 初始化 把配置文件放在安装目录下后,初始化的时候会…

玻色量子袁为出席中国移动第四届科技周量子计算算法与应用分论坛

9月12日,中国移动第四届科技周“量子计算算法与应用”分论坛在北京成功举办,中国移动研究院院长黄宇红发表致辞,中国移动未来研究院院长崔春风全程主持。玻色量子作为光量子计算领域真机测试与场景应用的标杆企业应邀出席,玻色量子…

【Matlab】如何将二阶线性微分方程进行Laplace变换得到传递函数

二阶线性微分方程进行Laplace变换 前言正文代码实现 前言 二阶线性微分方程: 一个二阶线性微分方程通常可以写成如下形式: y ′ ′ ( t ) p ( t ) y ′ ( t ) q ( t ) y ( t ) f ( t ) y^{\prime \prime}(t)p(t) y^{\prime}(t)q(t) y(t)f(t) y′′(t)p(t)y′(t)q(t)y(t)f(…

sleep和wait区别,并且查看线程运行状态

一、sleep和wait区别 区别一:语法使用不同 wait 方法必须配合 synchronized 一起使用,不然在运行时就会抛出 IllegalMonitorStateException 的异常 而 sleep 可以单独使用,无需配合 synchronized 一起使用。 区别二:所属类不同…

掌握iText:轻松处理PDF文档-高级篇-添加水印

前言 iText作为一个功能强大、灵活且广泛应用的PDF处理工具,在实际项目中发挥着重要作用。通过这些文章,读者可以深入了解如何利用iText进行PDF的创建、编辑、加密和提取文本等操作,为日常开发工作提供了宝贵的参考和指导。 掌握iText&…

【Apollo】ubuntu20.04源码安装apollo8.0

官方源码安装教程 https://blog.csdn.net/weixin_45929038/article/details/120113008 安装NVIDIA GPU驱动 Apollo 8.0 的一些模块的编译和运行需要依赖 NVIDIA GPU 环境(例如感知模块),如果有编译和运行这类模块的需求,则需要安…

蓝桥杯第一场强者挑战赛(C)SOSdp

之前在cf上面接触过SOSdp(子集dp),这里就碰到了。 思路: 异或运算即非进位加法运算,因此如果需要进位的话,那么就无法满足题意,因此条件弱化为不需要进位,也就是不存在同一位上面都是…

多维时序 | Matlab实现GA-LSTM-Attention遗传算法优化长短期记忆神经网络融合注意力机制多变量时间序列预测

多维时序 | MATLAB实现BWO-CNN-BiGRU-Multihead-Attention多头注意力机制多变量时间序列预测 目录 多维时序 | MATLAB实现BWO-CNN-BiGRU-Multihead-Attention多头注意力机制多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 多维时序 | Matlab实…

Dubbo 的 go 语言实现迎来了 Dubbo3 版本

新版本的 dubbo-go: 全面升级 Triple 协议,兼容 gRPC、标准 HTTP 客户端,提供简单明了的 API 用于编写 RPC server 与 client,解决组件间的基本通信问题。 针对微服务场景,提供了完善的服务治理能力,这包括配置管理、可观测性、流量管控规则、生态集成与适配等的全面升级…

基于Python+WaveNet+MFCC+Tensorflow智能方言分类—深度学习算法应用(含全部工程源码)(一)

目录 前言引言总体设计系统整体结构图系统流程图 运行环境Python环境TensorFlow 环境Jupyter Notebook环境Pycharm 环境 相关其它博客工程源代码下载其它资料下载 前言 博主前段时间发布了一篇有关方言识别和分类模型训练的博客,在读者的反馈中发现许多小伙伴对方言…

Kubernetes(k8s)集群部署----->超详细

Kubernetes(k8s)集群部署----->超详细 一、资源准备二、安装准备2.1 主机环境设置2.1.1 关闭操作系统防火墙、selinux2.1.2 关闭swap交换分区2.1.3 允许iptables检测桥接流量(可选) 2.2 安装Docker环境2.3 安装Kubeadm…

idea__SpringBoot微服务10——整合JDBC(新依赖)

整合JDBC 完整项目地址:一、创建一个项目二、idea配置连接mysql三、创建yaml数据库连接配置文件四、测试一下,没有问题五、增删改查————————创作不易,如觉不错,随手点赞,关注,收藏(* ̄︶…

CS110L 系统编程安全 笔记

用户向程序输入数据,程序分析数据,但是当用户的输入大于缓冲区长度时,数据会溢出,覆盖掉内存中其他内容,比如函数返回地址,从而可能导致程序返回到错误的地址执行了不安全的程序(远程代码执行&a…

MySQL笔记-第10章_创建和管理表

视频链接:【MySQL数据库入门到大牛,mysql安装到优化,百科全书级,全网天花板】 文章目录 第10章_创建和管理表1. 基础知识1.1 一条数据存储的过程1.2 标识符命名规则1.3 MySQL中的数据类型 2. 创建和管理数据库2.1 创建数据库2.2 使…

Xcode编译速度慢是什么原因?如何提高编译速度?

Hello各位伙伴们好,我是咕噜铁蛋!作为一个开发者,我们都希望能够高效地开发应用程序,而编译速度是影响开发效率的重要因素之一。然而,有时候我们会发现在使用 Xcode 进行开发时,编译速度非常慢,…

模块一——双指针:11.盛最多水的容器

文章目录 题目解析算法原理解法一:暴力枚举(超时)解法二:双指针单调性 代码实现暴力枚举(超时)双指针单调性(时间复杂度为O(N),空间复杂度为O(1)) 题目解析 题目链接:11.盛最多水的容器 这道题…

C++的移动语义和完美转发

参考《现代C语言核心特性解析》 移动语义 C11新特性的std::move()用于将一个左值转换为右值引用。它并不是实际移动或复制数据,而是通过将一个左值强制转换为一个右值引用来实现对对象的转移。这个特性在C11中引入,用于优化对象移动操作的效率。 我们…