十九章总结 Java绘图

news/2024/7/8 3:11:17 标签: java, 开发语言

19.1.1 Graphics类

Graphics 类是Java AWT(Abstract Window Toolkit)包中的一个重要类,用于在图形设备上绘制图形。它是一个抽象类,其实例通常由系统提供。

Graphics 类提供了一系列方法,可以用于绘制文本、图像、形状等,并操作颜色、字体等图形属性。它是构建图形用户界面(GUI)的基础之一,常用于绘制图形界面的组件。

19.1.2 Graphics2D类

使用Graphics 类可以完成简单的图形绘制任务,但是它所实现的功能非常有限,如无法改变线条
的粗细、不能对图片使用旋转和模糊等过滤效果。Graphics2D 类继承 Graphics 类,实现了功能更加强大的绘图操作的集合。由于 Graphics2D 类是Grephics 类的扩展,也是推荐使用的 Java 绘图类,所以本章主要讲解如何使用 Graphics2D 类实现Java绘图。

说明:

Graphics2D 是推荐使用的绘图类,但是程序设计中提供的绘图对象大多是 Graphics 类的实例对这时应该使用强制类型转换将其转换为 Graphics2D 类型

java">public void paint(Graphics g){
Graphics2D g2 = (Graphics2D) g; (//强制类型转换为 Graphics2D 类型
g2...
}

19.2 绘制图形 

例题19.1:绘制奥运五环图案

例题19.2:绘制空心和实心的集合图型 

19.3 绘图颜色与画笔属性

19.3.1 设置颜色

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

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

19.3.2 设置画笔 

默认情况下,Graphics 类使用的画笔属性是粗细为 1个像素的正方形,而 Graphics2D 类可以调setStroke0方法设置画笔的属性,如改变线条的粗细、虚实,定义线段端点的形状、风格等。语法格如下:

setStroke(Stroke stroke)

 其中,参数 stroke 是Stroke 接口的实现类对象。setStroke0方法必须接受一个 Stroke 接口的实现类对象作参数java.awt 包中提供了 BasicStroke秀它实现了 Stroke 接口,并且通过不同的构造方法创建画笔属性不同的对象。这些构造方法如下:

 

19.4 绘制文本 

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

19.4.1 设置字体

Java使用Font类封装了字体的大小,样式等属性,该类在Java.awt包中定义,其构造方法可以指定字体的名称,大小和样式语法如下:

Font(String name,int style,int size)
name:字体的名字
style:字体的样式
size:字体的大小

19.4.2 显示文字

例题19.3 绘制文字钟表

19.5 显示图片 

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

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

该方注将img图片显示在 x、y 指定的位置上。方法中涉及的参数说明如表 19.4 所示. 

例题19.4:在窗体中显示照片 

 

19.6 图像处理 

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

19.6.1——放大与缩小

在19.5节讲解显示图片时,使用了 drawImage0方法将图片以原始大小显示在窗体中,要想实现图的放大与缩小,则需要使用它的重载方法。语法如下:

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

该方法将 img 图片显示在x 、y 指定的位置上,并指定图片的宽度和高度属性。方法中涉及的参数说明如表19.5所示。

 例题19.5:通过滑动条改变图片大小

19.6.2 图像翻转 

图像的翻转需要使用 drawImage0方法的另一个重载方法。语法如下:

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

此方法总是用非缩放的图像来呈现缩放的矩形,并动态地执行所需的缩放。此操作不使用缓存的缩放图像。执行图像从源到目标的缩放,要将源矩形的第一个坐标映射到目标矩形的第一个坐标,源矩形的第二个坐标映射到目标矩形的第二个坐标,按需要缩放和翻转子图像,以保持这些映射关系。方法中涉及的参数说明如表 19.6 所示。 

例题19.6:翻转照片 
java">package 十九;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*; 
import javax.imageio.*;
public class PartImage extends JFrame {
	private Image img;
	private int dx1,dy1,dx2,dy2;
	private int sx1,sy1,sx2,sy2;
	private int width=1020,height =768;
	private JButton vBtn=null;
	private JButton hBtn=null;
	private CanvasPanel canvasPanel =null;
	public PartImage() {
			try {
				img=ImageIO.read(new File("src/十九/原神启动.jpg"));//读取图片文件
			}catch (IOException e) {
				e.printStackTrace();
			}
			dx2 =sx2 =width;
			dy2 =sy2= height;
			vBtn =new JButton("垂直");
			hBtn =new JButton("水平");
				
			JPanel bottom=new JPanel();
			bottom.add(hBtn);
			bottom.add(vBtn);
				
			Container c=getContentPane();
			c.add(bottom,BorderLayout.SOUTH);
			canvasPanel =new CanvasPanel();
			c.add(canvasPanel,BorderLayout.CENTER);
				
			addListener();
				
			setBounds(400,400,600,560);
			setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			setTitle("图片翻转");
	 }
	 private void addListener() {
		 vBtn.addActionListener(new ActionListener() {
			 public void actionPerformed(ActionEvent e) {
				 sy1=Math.abs(sy1-height);
				 sy2=Math.abs(sy2-height);
			 canvasPanel.repaint();
			 }
		 });
		 hBtn.addActionListener(new ActionListener() {
			 public void actionPerformed(ActionEvent e) {
				 sx1=Math.abs(sx1-width);
				 sx2=Math.abs(sx2-width);
				 canvasPanel.repaint();
			 }
		 });
	 }
	 class CanvasPanel extends JPanel{
		 public void paint(Graphics g) {
			 g.drawImage(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, this);//绘制指定大小
		 }}
	 public static void main(String[] args) {
		new PartImage().setVisible(true);
	}}

 

 

19.6.3 图像旋转

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

rotate(double theta)

例题19.7:让照片围绕左上角点旋转 

19.6.4 图像倾斜 

可以使用Graphics2D类提供的shear()方法设置绘图的倾斜方向,从而使图像实现倾斜的效果,语法如下:

shear(double shx,double shy)

 例题19.8:让照片向左倾斜的平行四边形

结束力 


http://www.niftyadmin.cn/n/5188009.html

相关文章

Spring Boot使用EhCache完成一个缓存集群

在上一篇在SpringBoot中使用EhCache缓存,我们完成了在Spring Boot中完成了对EhCaChe的使用,这篇,我们将对EhCache的进一步了解,也就是搭建一个EhCache的缓存集群。 集群 在搭建一个EhCache的时候,我们需要先了解&…

2023年中国涂料树脂需求量、市场规模及行业竞争现状分析[图]

涂料用树脂是涂料的主要原材料,是涂料的主要成膜物,且了为涂料成品提供耐醇、耐磨、耐高温、耐高湿、减少涂料在涂装完成后的损耗、保持涂装后外观以及性状的稳定性等功能。 根据生产产品的性状不同,其下游产品,即涂料成品广泛应用…

2023年中国恒温蜡疗仪发展趋势分析:应用前景存有很大发展与探索空间[图]

恒温电蜡疗仪可将蜡熔化,利用蜡自身特点,能阻止热的传导、散热慢、气体和水分不易消失,保温性能优越。利用蜡能紧密贴于体表的可塑性,可加入其他药物协同进行治疗,也可将中药与蜡疗有机地结合在一起,产生柔…

Odoo 15开发手册第七章 记录集 - 使用模型数据

在前面的章节中,我们概览了模型创建以及如何向模型加载数据。现在我们已有数据模型和相关数据,是时候学习如何编程与其进行交互了。 业务应用需要业务逻辑来计算数据、执行验证或自动化操作。Odoo框架API为开发者提供了工具用于实现这种业务逻辑。大多数…

第7章 模式匹配与正则表达式

目录 1. 不用正则表达式来查找文本模式2. 用正则表达式来查找文本模式2.1 创建正则表达式(Regex)对象2.2 匹配Regex对象 3. 用正则表达式匹配更多模式3.1 利用括号分组3.2 用管道匹配多个分组3.3 用问号实现可选匹配3.4 用星号匹配零次或多次3.5 用加号匹…

Flutter应用-使用sqflite升级数据库

文章目录 问题描述具体做法代码示例更多条件限制升级 数据库迁移和备份简介数据库迁移数据库备份 问题描述 使用fluttter开发的应用程序发布后,发现数据库有些设计不合理。如何来更新数据库呢? 使用sqflite来处理数据库,但是第一版软件发布后…

vue-组件生命周期+网络请求

​🌈个人主页:前端青山 🔥系列专栏:Vue篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来vue篇专栏内容:vue-组件生命周期网络请求 目录 组件生命周期 1. Vue的生命周期 2. Vue 子组件和父组件执行顺序…

SpringMVC调用流程

SpringMVC的调用流程 SpringMVC涉及组件理解: DispatcherServlet : SpringMVC提供,我们需要使用web.xml配置使其生效,它是整个流程处理的核心,所有请求都经过它的处理和分发![ CEO ] HandlerMapping : SpringMVC提供&…