Java中Graphics

合集下载

Java中的图形图像处理和特征提取

Java中的图形图像处理和特征提取

Java中的图形图像处理和特征提取图形图像处理和特征提取是Java编程中的重要领域,它们在计算机视觉、图像识别、模式识别等应用领域中起着关键作用。

本文将介绍Java中的图形图像处理和特征提取的基本概念、常用算法和相关工具。

一、图形图像处理图形图像处理是指对图像进行改变、增强、重建等操作的一系列技术方法。

在Java中,图形图像处理通常涉及图像的读取、保存、调整、滤波、变换、合并等操作。

下面我们将介绍几种常见的图形图像处理技术及其在Java中的实现方式。

1.图像读取与保存:Java中可以使用ImageIO类来读取和保存图像文件。

例如,可以使用以下代码读取一张图片:```BufferedImage img = ImageIO.read(new File("image.jpg"));```然后可以使用以下代码将图像保存到文件中:```ImageIO.write(img, "jpg", new File("output.jpg"));```2.图像调整:图像的调整包括亮度、对比度、饱和度等的调整。

Java中可以使用RescaleOp类来实现图像的调整。

例如,以下代码将图像的亮度调整为原来的两倍:```float scaleFactor = 2.0f;RescaleOp op = new RescaleOp(scaleFactor, 0, null);BufferedImage adjustedImg = op.filter(img, null);```3.图像滤波:图像滤波是对图像进行模糊、锐化、边缘检测等操作。

Java中可以使用ConvolveOp类来实现图像的滤波。

例如,以下代码使用一个3x3的均值滤波器对图像进行模糊处理:```float[] matrix = { 1/9f, 1/9f, 1/9f, 1/9f, 1/9f, 1/9f,1/9f, 1/9f, 1/9f };ConvolveOp op = new ConvolveOp(new Kernel(3, 3, matrix));BufferedImage filteredImg = op.filter(img, null);```4.图像变换:图像变换是对图像进行旋转、缩放、翻转等操作。

java画图Graphics文字自动换行

java画图Graphics文字自动换行

java画图Graphics⽂字⾃动换⾏/*** ⽂字超出限定长度⾃动换⾏** @param g 画布* @param font 字体样式* @param text ⽂字* @param widthLength 最⼤长度(多少长度后需要换⾏)* @param x ⽂字位置坐标 x* @param y ⽂字位置坐标 Y* @param yn 每次换⾏偏移多少pt*/private void drawString(Graphics2D g, Font font, String text, int widthLength, int x, int y, int yn) {FontMetrics fg = g.getFontMetrics(font);List<String> ls = new ArrayList<>(2);getListText(fg, text, widthLength, ls);for (int i = 0; i < ls.size(); i++) {if (i == 0) {g.drawString(ls.get(i), (int) UnitConv.mm2pt(x), (int) UnitConv.mm2pt(y));} else {g.drawString(ls.get(i), (int) UnitConv.mm2pt(x), (int) UnitConv.mm2pt(y + yn));}}}/*** 递归切割字符串* @param fg* @param text* @param widthLength* @param ls*/private void getListText(FontMetrics fg, String text, int widthLength, List<String> ls) {String ba = text;boolean b = true;int i = 1;while (b) {if (fg.stringWidth(text) > widthLength) {text = text.substring(0, text.length() - 1);i++;} else {b = false;}}if (i != 1) {ls.add(ba.substring(0, ba.length() - i));getListText(fg, ba.substring(ba.length() - i), widthLength, ls);} else {ls.add(text);}}画图中需要填写⽂字,⽽⽂字⼤⼩不固定的时候就会超出画布,显⽰不了⽂字,就需要⾃动换⾏。

谈谈Graphics类

谈谈Graphics类

谈谈java.awt.Graphics类图形环境的概念同在GUI 平台上开发应用程序紧密相关。

虽然通常将窗口和组件本身作为对象来表达,但仍然需要另一个接口来执行实际的绘制、着色以及文本输出操作。

Java 语言中提供这些功能的基类称作java.awt.Graphics。

从ponent 类(所有窗口对象的基类)继承的类提供了一个名为paint() 的方法,在需要重新绘制组件时,调用该方法。

paint() 方法只有一个参数,该参数是Graphics 类的实例。

Graphics 类支持几种确定图形环境状态的特性。

以下列出了部分特性:1.Color:当前绘制颜色,它属于java.awt.Color 类型。

所有的绘制、着色和纯文本输出都将以指定的颜色显示。

2.Font:当前字体,它属于java.awt.Font 类型。

它是将用于所有纯文本输出的字体。

3.Clip:java.awt.Shape 类型的对象,它充当用来定义几何形状的接口。

该特性包含的形状定义了图形环境的区域,绘制将作用于该区域。

通常情况下,这一形状与整个图形环境相同,但也并不一定如此。

4.ClipBounds:java.awt.Rectangle 对象,它表示将包围由Clip 特性定义的Shape 的最小矩形。

它是只读特性。

5.FontMetrics:java.awt.FontMetrics 类型的只读特性。

该对象含有关于图形环境中当前起作用的Font 的信息。

6.Paint Mode:该特性控制环境使用当前颜色的方式。

如果调用了setPaintMode() 方法,那么所有绘制操作都将使用当前颜色。

如果调用了setXORMode() 方法(该方法获取一个Color 类型的参数),那么就用指定的颜色对像素做“XOR”操作。

XOR 具有在重新绘制时恢复初始位模式的特性,因此它被用作橡皮擦除和动画操作。

Graphics 类方法:可以将java.awt.Graphics 支持的非特性方法划分为三个常规类别之下:1.跟踪形状轮廓的绘制方法:draw3DRect() drawArc() drawBytes() drawChars()drawImage() drawLine() drawOval() drawPolygon()drawPolyline() drawRect() drawRoundRect() drawString()2.填充形状轮廓的绘制方法:fill3DRect() fillArc() fillOval()fillPolygon() fillRect() fillRoundRect()3.诸如translate() 之类的杂项方法,它们将图形环境的起点从其缺省值(0,0) 变成其它值。

Java的Graphics类进行绘图的方法详解

Java的Graphics类进行绘图的方法详解

Java的Graphics类进⾏绘图的⽅法详解Graphics类提供基本绘图⽅法,Graphics2D类提供更强⼤的绘图能⼒。

Graphics类提供基本的⼏何图形绘制⽅法,主要有:画线段、画矩形、画圆、画带颜⾊的图形、画椭圆、画圆弧、画多边形等。

1. 画线在窗⼝画⼀条线段,可以使⽤Graphics类的drawLine()⽅法:drawLine(int x1,int y1,int x2,int y2) 例如,以下代码在点(3,3)与点(50,50)之间画线段,在点(100,100)处画⼀个点。

g.drawLine(3,3,50,50);//画⼀条线段g.drawLine(100,100,100,100);//画⼀个点。

2. 画矩形有两种矩形:普通型和圆⾓型。

(1) 画普通矩形有两个⽅法:drawRect(int x,int y,int width,int height):画线框围起来的矩形。

其中参数x和y指定左上⾓的位置,参数width和height是矩形的宽和⾼。

fillRect(int x,int y,int width,int height):是⽤预定的颜⾊填充⼀个矩形,得到⼀个着⾊的矩形块。

以下代码是画矩形的例⼦:g.drawRect(80,100,40,25);//画线框g.setColor(Color.yellow);g.fillRect(20,70,20,30);//画着⾊块(2)画圆⾓矩形也有两个⽅法:drawRoundRect(int x,int y,int width, int height, int arcWidth, int arcHeight):是⽤线围起来的圆⾓矩形。

其中参数x和y指定矩形左上⾓的位置;参数width和heigth是矩形的宽和⾼;arcWidth和arcHeight分别是圆⾓弧的横向直径和圆⾓弧的纵向直径。

fillRoundRect(int x,int y,int width,int height,int arcWidth,int archeight):是⽤预定的颜⾊填充的圆⾓矩形。

graphics2d rotate 函数说明 -回复

graphics2d rotate 函数说明 -回复

graphics2d rotate 函数说明-回复[graphics2d rotate 函数说明]Graphics2D类是Java中用于绘制2D图形的重要类之一。

它提供了许多强大的功能和方法,用于绘制和操作2D图形。

其中,rotate函数是Graphics2D类中的一个重要方法,用于实现图形的旋转效果。

在本文中,我们将详细介绍rotate函数的使用方法和注意事项,并通过一步一步的示例来帮助读者理解。

一、rotate函数的基本介绍rotate函数是Graphics2D类中的一个方法,用于实现图形的旋转。

它的定义如下:public void rotate(double theta)rotate函数接受一个参数theta,表示要旋转的角度。

角度的单位可以是弧度或度,取决于所选择的坐标系统,默认情况下,Java使用弧度作为角度的单位。

二、rotate函数的使用方法要使用rotate函数,我们需要在Graphics2D对象上调用该方法,并将要旋转的角度作为参数传递给它。

下面是一个使用rotate函数的简单示例:import java.awt.*;import java.awt.geom.*;public class RotateExample extends Frame {public void paint(Graphics g) {Graphics2D g2d = (Graphics2D) g;g2d.clearRect(0, 0, 500, 500); 清除绘图区域设置旋转角度double angle = Math.toRadians(45);进行旋转g2d.rotate(angle);绘制矩形Rectangle2D rect = new Rectangle2D.Double(100, 100, 200, 150);g2d.fill(rect);}public static void main(String[] args) {RotateExample example = new RotateExample();example.setSize(500, 500);example.setVisible(true);}}在上述示例中,我们创建了一个自定义的继承自Frame的类RotateExample,在其paint方法中,我们首先将Graphics对象强制转换为Graphics2D对象g2d。

graphics 方法

graphics 方法

graphics 方法
Graphics 方法是 Java 中的一个绘图 API,它允许开发者使用图形字符、线条、图像等来绘制文本、图像等。

Java 中的 Graphics 方法主要源于 JavaFX 和 Java Swing,这两个框架都使用了 Graphics 方法来实现图形绘制功能。

JavaFX 是一个基于 Java 的跨平台桌面应用程序框架,它提供了丰富的图形和用户界面组件,这些组件包括按钮、文本框、标签、进度条、图片等等。

JavaFX 使用 Graphics 方法来绘制这些组件。

开发者可以使用 Graphics 对象的drawXXX 方法来绘制各种图形。

例如,使用 drawString 方法可以绘制文本。

drawString 方法接收三个参数:x 坐标、y 坐标和要绘制的字符串。

x 和 y 坐标是相对于屏幕的偏移量,字符串是绘制在屏幕上的。

Java Swing 是 Java 的一个用户界面组件库,它提供了许多用于绘制图形的组件,包括 JLabel、JButton、JPanel 等等。

Java Swing 使用 Graphics 方法来绘制这些组件。

Graphics 方法还可以用来绘制图像。

例如,可以使用 drawImage 方法将另一个图像加载到屏幕上。

drawImage 方法接收三个参数:要加载的图像、x 坐标、y 坐标和图像的宽高比。

总结起来,Graphics 方法是 Java 中用于绘制图形的重要 API,它提供了许多用于绘制文本、图像、线条等的方法,可以用于创建高质量的图形用户界面。

java——Graphics

java——Graphics

调用paint的一般是repaint()或当显示器刷新的时候调用的类似repaint()的类。

当对于桌面执行了某类操作,改变了桌面上的图象时,jvm收到界面被调整的信息,此时会调用visible是ture的图形组件的repaint()方法对界面重绘。

当然,直接重绘或全部重绘是很亏的,一个是用双缓存技术,另一个是只对桌面上显示的部分重绘。

双缓存是指在缓存内先模拟重绘过程,只把最后成形的结果传给显示器显示。

部分重绘就是指使用repaint(Dimension area)及类似的方法,只重绘与需调整的部分相关的界面。

幸运的是,目前jdk提供的repaint()并不是傻呼呼的就直接重绘所有组件,已经用了上述两种方法优化过了。

所以即使反复调用repaint()也不会有效率的损失。

repaint()是重要概念,它是在图形线程后追加一段重绘操作,是安全的!是系统真正调用的重绘!所以如果你需要某个部件刷新一下界面,记得调用repaint(),千万不要直接调用paint()!paint()是提供给用户编程的,往往声明在接口之中,然后用户实现该接口,以拥有重绘的功能。

若要定制某个图形组件的界面,可以重写paint()方法,记得一般习惯这样改写:void paint(Graphics g){super.paint(g);// your code}除了paint(),有的组件会有paintBorder()之类的专门用于某个部分重绘的方法,不过一般是protected 的,在对该类组件扩展的时候可以重写该方法。

最后,graphics是一个抽象类,其实现大都是平台相关的,所以不容易自己创建一个graphics 实例。

一般graphics的实例会由依照你所在的桌面环境给出。

Graphics类及其子类Graphics2D提供的只是一些基本绘图方法,比如画直线、曲线什么的。

所以做一个图形组件的基本思路可以总结为以下过程:选择适合的基本图形组件-> 继承它-> 重写paint等方法-> 在需要刷新图形的时候调用repaint等方法!至于Graphics,先假设它存在,因为真正的Graphics实例只有当程序在jvm上跑的时候才会创建。

java学习——102.画直线

java学习——102.画直线

java学习——102.画直线在计算机中,图形是一门很高深的学问,在我看来,因为里面涉及到比较多的数学问题......用JAVA是可以画图的。

今天介绍简单的用Java画直线。

Java提供在组件上绘图的功能,通过绘图类Graphics对象调用绘图方向实现。

1、Graphics图形类Graphics类在Java.awt中被定义,可以设置图形颜色、字符串字体等,其声明如下:public abstract class Graphics extends Object{public abstract Color getColor(); //获取当前颜色public abstract void setColor(Color c); //设置颜色public abstract void drawLine(int x1, int y1, int x2, int y2); //画直线public void drawRect(int x, int y, int width, int height) ; //画矩形public abstract void fillRect(int x, int y, int width, int height); //填充矩形public abstract void drawOval(int x, int y, int width, int height); //画椭圆public abstract void drawString(String str, int x, int y); //显示字符串public abstract Font getFont(); /获得颜色public abstract void setFont(Font font);//设置颜色}但Graphics类是一个抽象类,不能被具体地实例化,要具体的画图,一般是通过在画布上进行画。

2、画布类CanvasCanvas类也在Java.awt中。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
,目前常用的控制组件有选择类的单选按钮、复选按钮、下 拉列表,有文字处理类的文本框、文本区域,有命令类的按钮、 菜单等。使用控制组件,通常需要如下的步骤:
(1) 创建某控制组件类的对象,指定其大小等属性。 (2) 使用某种布局策略,将该控制组件对象加入到某个容器 中的指定位置处。
Object Font FontMetrics Color Graphics Polygon Component
图8.2 java.awt包中的文字图形类(是由Object类派生的)
8.1.4 Applet的执行程序
限于我们目前的知识,在讲述本章的内容时我们以Applet 应用程序为所有示例程序的容器,且通过引用或重载Applet类 的某些成员方法来实现文字及图形的绘制。为此,有必要先介 绍Applet应用程序的执行过程及其所引用的方法。每个Applet应 用程序都是Applet类的子类,在实际运行中,浏览器在下载字 节码的同时,会自动创建一个用户Applet子类的对象,并在适 当事件发生时自动调用该对象的几个主要方法。下面说明这些 方法的引用过程。
(3) 将该组件对象注册给所能产生的事件对应的事件监听程 序,重载事件处理方法,实现利用该组件对象与用户交互的功 能。
3.用户自定义成分
除了上述的标准图形界面元素外,编程人员还可以根据用 户的需要,使用各种字型、字体和色彩设计一些几何图形、标 志图案等,它们被称为用户自定义成分。用户自定义成分通常 只能起到装饰、美化的作用,而不能响应用户的动作,也不具 有交互功能。
8.1.1 图形用户界面元素分类
1.容器
容器是用来组织或容纳其他界面成分和元素的组件。一个容 器可以包含许多组件,同时它本身也可以作为一个组件,放进另 一容器中。一般来说,一个应用程序的图形用户界面首先对应于 一个复杂的容器,例如一个窗口。这个容器内部将包含许多界面 成分和元素,其中某些界面元素本身也可能又是一个容器,这个 容器再进一步包含它的界面成分和元素,依此类推就构成一个复 杂的图形界面系统。
由于用户自定义成分易于学习和掌握,同时,各种基本图 形和说明性文字又是容器和控制组件的基本成分,而且考虑到 由浅入深的学习规律,因此我们先在本章利用AWT包学习用户 自定义成分,在第9章和第10章再学习控制组件和复杂的容器。
8.1.2 屏幕坐标系
文本与图形通过一定的坐标关系显示在屏幕的适当位置上。 Java坐标系是一个二维网格,它可以标识屏幕上每个点的坐标位 置。坐标单位用像素来度量。一个像素是一台显示器的最小分 辨单位。坐标系由一个x坐标(水平坐标)和一个y坐标(垂直坐标) 组成。在缺省状态下原点为屏幕左上角坐标(0,0),因此,x坐 标是从左向右移动的水平距离,y坐标是从上向下移动的垂直距 离。图8.1中的坐标(x,y)表示点与原点的水平距离是x,垂直距 离是y。
(3) paint()方法:它的主要作用是在Applet的界面中显示文 字、图形和其他界面元素。浏览器调用paint()方法的事件主要 有如下三种。
① 当浏览器首次显示Applet时,会自动调用paint()方法。 ② 当用户调整窗口大小或移动窗口时,浏览器会调用paint() 方法。
③ 当repaint()方法被调用时,系统将首先调用update()方法 将Applet对象所占用的屏幕空间清空,然后调用paint()方法重画。
容器是Java中的类,例如框架(JFrame)、面版(JPanel)及滚动 面板(JScrollPanel)等类。容器的引入有利于分解图形用户界面的 复杂性。当界面的功能较多时,使用层层相套的容器是非常必要 的。
2.控制组件
与容器不同,控制组件是图形用户界面的最小单位之一, 它里面不再包含其他的成分。控制组件的作用是完成与用户的 一次交互,包括接收用户的一个命令(如菜单命令),接收用户输 入的一个文本或选择,向用户显示一段文本或一个图形等等。
0
0
X轴
Y轴 图8.1 Java坐标系
8.1.3 与文字图形有关的类
图8.2给出了java.awt包层次的一部分——有关文字、颜色和 基本图形的类。图中的每一个类都是从类Object直接派生出来的: 类Font是用于操作字体的;类Color是用于操作颜色的;类 FontMetrics主要用于获取字体的有关信息;类Polygon用于创建 多边形;类Graphics用于绘制各种串、线、矩形、圆和其他几何 图形。
(1) init()方法:当Applet程序启动时自动调用init()方法。 init()方法仅用来做初始化操作。用户程序可以重载父类的init() 方法,通过init()方法初始化图像文件、声音文件、字体或者其 他一些对象等。
(2) start()方法:Applet运行init()方法之后将自动调用start() 方法,start()方法体现了小应用程序要完成的功能。我们可以重 载父类的start() 方法,在这个方法体内实现我们程序的功能。
为了方便编程人员开发图形用户界面,Java提供了抽象窗 口工具包(Abstract Windowing ToolKit,缩写为AWT)和Swing 包这两个图形用户界面工具包。在这两个工具包中提供了丰 富的类库来支持编程人员创建与平台无关的用户界面。编程 人员可方便地使用这些类库来生成各种标准图形界面元素并 处理图形界面的各种事件。
第8章 文字与图形GUI设计
8.1 GUI设计概述 8.2 绘制文字 8.3 Color类 8.4 Graphics类
8.1 GUI设计概述
图形用户界面(Graphics User Interface,简称GUI)就是为应 用程序提供一个图形化的界面。GUI使用图形的方式借助菜单、 按钮等标准界面元素和鼠标操作,帮助用户方便地向计算机系 统发出命令、启动操作,并将系统运行的结果同样以图形的方 式显示给用户,使一个应用程序具有画面生动、操作简便的效 果,省去了字符界面中用户必须记忆各种命令的麻烦,深受广 大用户的喜爱和欢迎,已经成为目前几乎所有应用软件的既成 标准。
相关文档
最新文档