![Java程序设计课件(高晓黎)第十章文本显示与图形图像处理_第1页](http://file4.renrendoc.com/view/0d93213a6c0aff0498aa00b27fd11992/0d93213a6c0aff0498aa00b27fd119921.gif)
![Java程序设计课件(高晓黎)第十章文本显示与图形图像处理_第2页](http://file4.renrendoc.com/view/0d93213a6c0aff0498aa00b27fd11992/0d93213a6c0aff0498aa00b27fd119922.gif)
![Java程序设计课件(高晓黎)第十章文本显示与图形图像处理_第3页](http://file4.renrendoc.com/view/0d93213a6c0aff0498aa00b27fd11992/0d93213a6c0aff0498aa00b27fd119923.gif)
![Java程序设计课件(高晓黎)第十章文本显示与图形图像处理_第4页](http://file4.renrendoc.com/view/0d93213a6c0aff0498aa00b27fd11992/0d93213a6c0aff0498aa00b27fd119924.gif)
![Java程序设计课件(高晓黎)第十章文本显示与图形图像处理_第5页](http://file4.renrendoc.com/view/0d93213a6c0aff0498aa00b27fd11992/0d93213a6c0aff0498aa00b27fd119925.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第十章 文本显示与图形图像处理 第1章走马观花看Java目 录 重点与难点点拨Java绘图基础 Java图像处理 经典练习题Graphics绘图 字体设置 本章知识重点3132GUI组件及Graphics类的绘图方法 33字体设置34基本图形绘制的各方法及画布CanvasJava图像处理35与图形图像处理相关的类 本章知识难点33基本图形绘制的各方法及画布Canvas343132GUI组件及Graphics类的绘图方法 字体设置及颜色设置图像的静态、动态处理Java绘图基础 Java的绘图机制 与图形图像处理相关的类 java中支持图形图像处理的类与接口主要定义于java.awt类库中31Ja
2、va绘图基础Graphics类 Graphics类中封装了几乎所有的图形处理的方法,该类用于在一个二维坐标系中绘制图形与显示格式化文字。由于Graphics类定义于java.awt包中,在绘制图形的程序中,必须引入java.awt,即在程序开头需加上以下语句: import java.awt.*; 或import java.awt.Graphics;32Java绘图基础 Graphics类的绘图区域为能够绘制并显示图形的一些组件,坐标原点在组件的左上角,X轴为水平方向,坐标值从左至右逐渐增大,Y轴在垂直方向,坐标值从上向下逐渐增大。Java坐标的度量单位是像素,在Java的图形坐标系统中,坐标
3、值只能为整数。由于不同的平台具体实现绘图功能中存在着一定差异,Graphics类为抽象类,不能用new命令创建Graphics类实例对象,Java只提供给用户一个不依赖于具体平台的通用接口,使用户能够调用Graphics类的各种绘图方法,实现绘图与绘制文本的功能。Java绘图基础 GUI程序中,文本的输出显示是作为图形对象来处理的,控制台应用程序中的System.out.println()方法,只能以DOS字符的形式,在命令行窗口上显示文字。GUI界面中字符串信息的显示,要使用Graphics或Graphics2D提供的绘制字符或字符串信息的成员方法。图形文本33Java绘图基础Graphic
4、s类提供了三种绘制文字的方法:字符串输出方法:drawString(String s,int x,int y)。字符数组输出方法:drawChars(char s,int offset,int length,int x,int y)。字节数组输出方法:drawBytes(byte s,int offset,int length,int x,int y)。其中x、y参数为字符串输出的位置坐标。例如:g. drawString(“我的爱好是读书和听音乐”,50,100);语句将会绘出一串文本,输出位置坐标为(50,100) 。Java绘图基础 GUI编程中,Color类定义了操作颜色的常量与方法,
5、该类的完整包路径为java.awt.Color。 Color类常用的三种构造方法的定义为:public Color(int r,int g,int b);public Color(float r,float g,float b);public Color(int rgb);Color类中封装了常用的13种标准颜色的符号常量。如: Color.BLACK Color.WHITE Color.RED Color.GREEN Color.BLUE Color.YELLOW 等颜色设置34Java绘图基础此外,Color类还提供了获取RGB颜色分量的对应方法:public int getRed();
6、/获取当前颜色的红色分量值(范围为0,255)。public int getGreen(); /获取当前颜色的绿色分量值(范围为0,255)。public int getBlue(); /获取当前颜色的蓝色分量值(范围为0,255)。 Java绘图基础 如创建一个以粉红色pink(RGB值为:255,175,175)前景显示“姓名”的标签对象,可用以下语句实现:Color labelColor=new Color(255,175,175);Label lblName=new Label(“姓名”);lblName.setForeground(labelColor);或者用以下等价的方式实现:L
7、abel lblName=new Label(“姓名”);lblName.setForeground(Color.PINK);Java绘图基础 java.awt.Component类作为大多数GUI组件的基类,定义了paint()方法,用来实现在组件上绘制图形的功能。applet小程序的基类:Applet或Japplet,也间接地由Component类派生,因此applet小程序也具有paint()方法 paint()方法定义:void paint(Graphics g); paint()方法通常由系统自动调用,用户一般不能直接在程序中显式调用它,而是通过repaint()方法来间接调用它。组
8、件首次显示外观时,applet小程序在被加载运行时,系统都会调用相关的paint()方法。 GUI组件的绘图方法Component类与paint()方法 31Java绘图基础此外,Component类中还定义了另外两个直接或间接调用paint()方法的方法:更新方法update(Graphics g);当组件的尺寸、外观等被改变时,系统将调用此方法,重新绘制组件。update()方法的实现中包含了对paint()方法的调用。重绘方法repaint();该方法没有参数,执行时会清除组件的原有背景图形,并使用paint()方法重新绘制该组件。用户可以在程序中直接调用repaint()方法,当组件为
9、轻量级组件时,该方法会直接调用paint()方法,否则会通过调用update()方法间接调用paint()方法。 Java绘图基础【例】在一个300200的Frame窗口内,用红色绘制四叶玫瑰曲线。Java绘图基础import java.awt.*;import java.awt.event.*;import java.awt.Color;public class Exa_10_1 extends Frame private static final double PI=3.1415926; private int appWidth,appHeight; public Exa_10_1(Str
10、ing title) super(title); this.setSize(300,200); /实现关闭窗口的功能 this.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); Java绘图基础public void paint(Graphics g) super.paint(g);/调用父类的绘制方法 /获取当前窗口的宽度与高度值 appWidth=this.getWidth(); appHeight=this.getHeight(); int o
11、x,oy,x,y; /设置原点(ox,oy)的坐标为当前窗口中心 ox=appWidth/2; oy=appHeight/2; g.setColor(Color.RED); /设置绘图的前景色 Java绘图基础/绘制坐标轴 g.drawLine(ox,10,ox,appHeight); g.drawLine(0,oy,appWidth,oy); /定义控制角度与半径变化的变量 int i,j=10; double angle,r; while (j100) for(i=0;i1023;i+) /计算最新的角度 angle = i*PI/512; r = j*Math.sin(2*angle);
12、 Java绘图基础/计算最新的轨迹点坐标 x =(int)Math.round(r*Math.cos(angle)*2); y =(int)Math.round(r*Math.sin(angle); g.fillOval(ox+x,oy+y,1,1); /画轨迹点 j = j + 5; /增进的步长 public static void main(String args) Exa_10_1 app=new Exa_10_1(Paint() Method Usage); app.setVisible(true); Java绘图基础 组件的基类Component类提供了一组get类型的方法用来获取
13、当前绘图上下文环境的一些重要参数。getGraphics()为当前组件创建 graphics上下文环境getGraphicsConfiguration()获取相关的Graphics设置getForeground()获取与当前组件的前景颜色getBackground()获取与当前组件的背景颜色getFont()获取与当前组件的字体对象getFontMetrics(Font font)获取指定字体的样式信息Component类的get/set方法组32Java绘图基础Component类还提供了一组用来设置外观与行为的set方法:setEnabled(),设置组件的可用性。setVisible()
14、,设置组件的可见性。setForeground(),设置组件的前景色。setBackground(),设置组件的背景色。setBounds(),设置组件的起始位置与尺寸大小。setLocation(),设置组件的起始位置。setSize(),设置组件的尺寸大小。setPreferredSize(),设置组件首选的尺寸。setMaximumSize(),设置组件的最大尺寸。setMinimumSize(),设置组件的最小尺寸。此外,常用的还有一个设置组件显示文字字体类型与样式的一个方法:public void setFont(Font f)。Java绘图基础【例】用组件的getGraphics(
15、)方法实现如下所述的功能:在一个300200的JFrame窗口内,放置一个标签与一个按钮,当点击按钮后,标签中绘制一个黄色的椭圆,并在椭圆内显示蓝色的RGB值。Java绘图基础import java.awt.*;import java.awt.event.*;import java.awt.Color;import javax.swing.*;public class Exa_10_2 extends JFrame implements ActionListener private JLabel jlblDraw=new JLabel(); private JButton jbtnDraw=n
16、ew JButton(开始绘图); public Exa_10_2(String title) super(title); this.setSize(300,200); jlblDraw.setSize(300,150); /实现关闭窗口的功能 Java绘图基础this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jbtnDraw.addActionListener(this); Container contentPane=this.getContentPane(); contentPane.setLayout(new BorderLayou
17、t(); contentPane.add(jlblDraw,BorderLayout.CENTER); contentPane.add(jbtnDraw,BorderLayout.SOUTH); /按钮点击事件响应方法 public void actionPerformed(ActionEvent e) /创建标签的Graphics上下文环境 Graphics g=jlblDraw.getGraphics(); Java绘图基础/用黄色画一填充椭圆 g.setColor(Color.YELLOW); g.fillOval(50,10,200,130); /用蓝色显示当前颜色的字符串 g.set
18、Color(Color.BLUE); g.drawString(g.getColor().toString(),65,75); /使按钮变得不再可用 jbtnDraw.setEnabled(false); public static void main(String args) Exa_10_2 app=new Exa_10_2(getGraphics() Method Usage); app.setVisible(true); Java绘图基础paintComponent(),用来绘制几何图形,渲染图形文字。paintComponent()方法的原型定义如下:protected void p
19、aintComponent(Graphics g);JComponent类的paintComponent()方法与Component类的paint()具有完全相同的参数形式,两种方法的功能与使用也基本类似。 JComponent类与paintComponent()方法 33Java绘图基础 Swing应用中,经常会在JPanel组件中绘制图形。通常的做法是:定义一个JPanel类的子类,在该子类中覆盖/重写类的paintComponent()方法,在方法体内放入绘图的操作语句。然后再将该JPanel组件添加到主窗口的内容窗格(ContentPane)内。 具体的实现结构类似于如下的代码: cl
20、ass drawPanel extends Jpanel public void paintComponent(Graphics g) / super.paintComponent(g); /相关的图形或文字绘制语句 字体设置 一个Font类的对象表示了一种字体显示效果,包括字体类型、Font MyFont = new Font ( TimesRoman, Font.BOLD, 12 ); MyFont对应的是12磅TimesRoman类型的黑体字,其中指定字型时要用到Font类三个常量:Font.PLAIN, Font.BOLD, Font.ITALIC。如果希望使用该Font对象,则可以利
21、用Graphics类的setFont( )方法: g. setFont ( MyFont );如果希望指定控制组件,如按钮或文本框中的字体效果,则可以使用控制组件的方法setFont( )。如设btn是一个按钮对象,则语句: btn.setFont(MyFont);另外,与setFont( )方法相对的getFont( )方法将返回当前Graphics或组件对象使用的字体。Font类字体设置【例】获取当前系统中所有可用字体的名称,在标签中显示出这些可用字体的数目,在文本区中显示出这些可用字体的名称。 字体设置import java.awt.*;import javax.swing.*;impo
22、rt java.awt.event.*;public class Exa_10_4 extends JFrame implements ActionListener /定义GUI所涉及的组件 JLabel jlblTotalFonts=new JLabel(); JButton jbtnDisp=new JButton(显示当前可用字体名称); JTextArea jtxtaFontNames=new JTextArea(); JScrollPane jsclpane4txtArea=new JScrollPane(jtxtaFontNames); 字体设置 public Exa_10_4(S
23、tring title) super(title); jbtnDisp.addActionListener(this); /为标签组件设置前景色为红色 jlblTotalFonts.setForeground(new Color(255,0,0); /设置文本区组件为不可编辑状态 jtxtaFontNames.setEditable(false); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); /添加各个组件到窗口的内容窗格中 Container contentPane=this.getContentPane(); contentPa
24、ne.setLayout(new BorderLayout(); contentPane.add(jlblTotalFonts,BorderLayout.NORTH); 字体设置contentPane.add(jsclpane4txtArea,BorderLayout.CENTER); contentPane.add(jbtnDisp,BorderLayout.SOUTH); this.setSize(300,300); this.setVisible(true); /响应按钮点击事件 public void actionPerformed(ActionEvent e) jbtnDisp.se
25、tEnabled(false); /使自己失效以免两次被点击 String availableFontNames; /获取当前平台可用的字体集 GraphicsEnvironment ge=GraphicsEnvironment.字体设置getLocalGraphicsEnvironment(); availableFontNames=ge.getAvailableFontFamilyNames(); /当前平台可用字体的总数 int total=availableFontNames.length; jlblTotalFonts.setText(当前平台系统可用的字体总数为: +total+)
26、; /将当前平台可用字体名称添加到文本区中 for (int k=0;ktotal;k+) jtxtaFontNames.append(availableFontNamesk+n); public static void main(String args) new Exa_10_4(Font Usage Demo); 字体设置FontMetrics类定义了字体的规格对象,提供了比Font类更详尽的特定字体的描述信息。这些信息可以通过调用FontMetrics类的相关方法来获得。FontMetrics类提供了获取文字样式中各类规格信息的成员方法。 创建FontMetrics类对象要通过调用Gra
27、phics类的getFontMetrics()方法来实现。如:public void paint(Graphics g) FontMetrics fm = g.getFontMetrics(); FontMetrics类字体设置【例】编程实现演示FontMetrics类的字体规格信息。用一根粗黑线表示Baseline,另外三根分别表示字体的Leading、Ascent和Descent的位置。窗口顶端包含输入显示文本内容的文本域及三个用来选择字体名称、字体样式及字号的组合列表框。当在文本域中输入新的内容并敲回车,或者改变了任何一个组合列表框的当前选择,都会使字体规格信息的演示内容发生变化。Gra
28、phics绘图 利用Graphics类可绘制的图形有直线、各种矩形、多边形、圆和椭圆等。下面的例子综合了这些方法。Graphics类的绘图方法Graphics绘图import java.awt.*;import java.applet.Applet;public class DrawFigures extends Applet public void paint ( Graphics g) g.drawLine(30,5,40,5); /画直线 g.drawRect(40,10,50,20);/画矩形框(左上角x坐标, y坐标,x轴尺寸,y轴尺寸) g.fillRect(60,30,70,40
29、); /画实心矩形 g.drawRoundRect(110,10,130,50,30,30); /画圆角矩形框 g.drawOval(150,120,70,40); /画椭圆形框(左上角x坐标,左上角y坐标,x轴尺 寸,y轴尺寸),若x 轴尺寸与y轴尺寸相等,则画出圆形 g.fillOval(190,160,70,40); /画实心椭圆Graphics绘图 g.drawOval(90,100,50,40); /画椭圆框 g.fillOval(130,100,50,40); /画实心椭圆 drawMyPolygon(g); /自定义的画多边形的方法 g.drawString(They are f
30、igures!,100,220); public void drawMyPolygon( Graphics g) int xCoords = 30,50,65,119,127; /保存多边形各点x坐标的数组 int yCoords = 100, 140,127,169,201; /保存多边形各点y坐标数组 g.drawPolygon( xCoords,yCoords,5); /画自由多边形框 Graphics绘图 要在Java程序图形界面的容器中绘制图形,首先,需要明确希望绘制的图形是什么,是圆、椭圆,还是直线,这由所选定的方法来确定;其次,需要指明所绘制图形或文字的大小和位置,Graphic
31、s绘图绘制直线的方法格式为: drawline(intx1, inty1, intx2, inty2)。其中整型参数对(x1,y1)代表直线的起点,(x2,y2)代表直线的终点。基本图形绘制 点(Point) 直线(Line)3132Graphics绘图【1】普通矩形线条方式:drawRect( (int x,int y,int w,int h) 填充方式:fillRect( int x,int y,int w,int h) 【参数说明】(x,y)为矩形的左上角坐标;w为矩形的宽度;h为矩形的高度。drawRect()和fillRect()方法的唯一不同之处在于:fillRect()方法画出矩
32、形框后用前景色将其填充。矩形(Rectangle)33 Graphics类中提供了三种矩形类型。这三类矩形都包括线条 方式与填充方式两类绘图方法。Graphics绘图【2】圆角矩形线条方式:drawRoundRect(int x,int y,int w,int h, int arcWidth,int arcHeight)填充方式:fillRoundRect(int x,int y,int w,int h, int arcWidth,int arcHeight)【参数说明】圆角性质参数arcWidth与arcHeight,分别代表了圆角弧对应椭圆的的长轴(水平轴)与短轴(垂直轴)。圆角矩形的圆角
33、性质参数的意义见图10.12。当arcWidth=w且arcHeight=h时,圆角矩形就成为一个椭圆。因此可用绘制圆角矩形的方法生成椭圆。Graphics绘图【3】立体矩形线条方式:draw3DRect(int x,int y,int w,int h,boolean raised)填充方式:fill3DRect(int x,int y,int w,int h,boolean raised) 【参数说明】布尔型的raised参数用来控制立体矩形的凸出或凹入效果。raised为true时,画出的立体矩形是凸起的;raised为false时,画出的立体矩形是凹陷的。Graphics绘图椭圆绘制方法
34、与普通矩形的方法在形式上相同的,这是因为椭圆的规格大小是用它的外接矩形来指定的。线条方式:drawOval(int x ,int y ,int w ,int h)填充方式:fillOval(int x ,int y ,int w ,int h)【参数说明】x、y参数代表椭圆外接矩形的左上角位置坐标。参数w、h代表椭圆外接矩形的宽度和高度。椭圆(Oval)34Graphics绘图圆弧是椭圆的一部分,夹在两个角之间,因此画圆弧的方法比画椭圆的方法多了两个角度参数(都以角度为单位):起始角和张角。起始角确定了圆弧的起始位置,张角确定了圆弧的大小。张角可正可负,当取正值时,画出的为沿逆时针方向的圆弧;
35、取负值时,画出的为沿顺时针方向的圆弧。当张角取值大于360时,画出的就是椭圆。圆弧(Arc)35Graphics绘图drawArc()方法画出的是一段圆弧,而fillArc()方法画出的是一个扇形。线条方式:drawArc(int x ,int y ,int w ,int h ,int startAngle ,int arcAngle)填充方式:fillArc(int x ,int y ,int w,int h ,int startAngle ,int arcAngle)【参数说明】前四个参数x、y、w和h规定了圆弧所对应椭圆的规格大小。startAngle表示圆弧的起始角。arcAngle表
36、示圆弧的张角,可取正负整数值代表有方向的角度。 Graphics绘图 线条方式画出的多边形一般是不封闭的,除非首顶点与尾顶点坐标值一样。但填充方式画出的填充多边形则为封闭的多边形,因为填充不应该溢出多边形的有效范围。 根据绘制所采用的数据表达方式的不同,多边形的绘制方法可分为两组,每一组又具有线条与填充两种绘制方式。多边形(Polygon)36Graphics绘图第一组:用坐标数组作为多边形的顶点序列绘制多边形:线条方式:drawPolygon(int xPoints,int yPPoints,int nPoints) 填充方式:fillPolygon(int xPts,int yPts,in
37、t n)【参数说明】xPoints与yPPoints为两个数组,分别保存多边形多个顶点的X坐标值与Y坐标值。两个数组的长度应该相等nPoints表示多边形顶点的个数,其值不能超过两个数组的长度。多边形绘制方法将两个数组对应的顶点按顺序用直线连接起来,组成一个多边形,多边形的顶点坐标序列为:(xPoints0,yPPoints0),(xPoints1,yPPoints1)(xPointsn,yPPointsn)。Graphics绘图第二组:用Polygon对象作为数据源绘制多边形:线条方式:drawPolygon(Polygon p)填充方式:fillPolygon(Polygon p)【参数说
38、明】参数p为Polygon对象。Polygon类是java.awt包内提供的工具类,该类封装了一个封闭区域的节点坐标序列。该类具有以下构造方法:Polygon(),创建一个空的多边形对象。Polygon(int xpoints, int ypoints, int npoints),创建以指定参数为初始化值的多边形对象。其参数意义与drawPolygon()方法相同。 Polygon类具有addPoint(int x, int y)成员方法,用来将一个指定点的坐标添加到多边形对象中。画布Canvas Canvas是java.awt包中用来绘图的矩形组件,其作用类似于Windows的画图板,用户可
39、在这块区域上直接画出图形。Canvas继承自Component类,具有Paint(Graphics g)、update(Graphics g)及repaint()方法,能够响应鼠标和键盘事件,并具有自己的坐标系统。画布提供了一块专门的图形区域,通过设定自己的边界而和其它组件区分开,以保护画面不被覆盖。即使画面被破坏,仍可通过调用Canvas的paint()方法重画图形,恢复原有的状态。Canvas类的构造方法有两种形式: 无参构造方法Canvas(),用来创建一个新的画布对象。有参构造方法Canvas(GraphicsConfiguration config),创建一个适用于指定的绘图配置对象
40、的的画布对象。画布Canvas如Canvas canvas1=new Canvas();语句就创建了一个空白的画布对象。创建了Canvas对象后,还要调用setSize()方法设定这个画布的大小。 Canvas类的重要方法包括:paint(Graphics g),用来在画布上绘制图形。void update(Graphics g),用来更新画布。用户无法直接使用Canvas的paint()方法,使用时需要先定义一个以Canvas为基类的子类,并在子类中重写paint()方法;然后在子类的paint()方法中,借助于方法的Graphics对象参数,调用Graphics类的绘图方法,实现用户的绘图
41、操作。画布Canvas【例】使用画布实现以下功能:在画布上沿一条水平直线,从左到右绘制一系列的圆,圆的半径逐步增大,所有圆的圆心坐标在水平直线上。画布Canvasimport java.awt.*;import javax.swing.*;import java.awt.Color;/建立一个Canvas类的子类class MulOvalsCanvas extends Canvas private int oy; private int canvasWidth; /构造方法中设置画布尺寸 public MulOvalsCanvas() this.setSize(450,250); oy=(th
42、is.getHeight()-30)/2; canvasWidth=this.getWidth(); 画布Canvas/重写paint()方法 public void paint(Graphics g) int ox=12; int r=10; /绘制水平直线 g.setColor(Color.RED); g.drawLine(0,oy,canvasWidth,oy); /沿水平直线绘制一系列的圆 g.setColor(Color.BLUE); /构造循环体 while (ox+r)(canvasWidth-15) g.drawOval(ox-r,oy-r,2*r,2*r); r+=5; ox
43、+=15; 画布Canvaspublic class Exa_10_11 extends JFrame /建立一个JPanel子类的对象 MulOvalsCanvas multipleOvals=new MulOvalsCanvas(); public Exa_10_11(String title) super(title); this.setSize(450,250); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container contentPane=this.getContentPane(); contentPane.ad
44、d(multipleOvals); this.setVisible(true); public static void main(String args)Exa_10_11 app=new Exa_10_11(Canvas Usage Demo);Java图像处理 静态图像处理 常用的图像文件格式有BMP、JPEG、GIF、PNG等格式。图像的基本操作 Java中处理图像的基本操作主要包括:创建图像对象,获取图像资源,加载图像,显示图像等。Java图像处理java.awt的Component类提供了一个createImage()方法来生成Image图像对象。CreateImage()方法有两种
45、重载形式:Image createImage(ImageProducer producer);方法的第一种形式从一个指定的图像产生器producer创建一幅图像并由方法返回。producer是一个现实了ImageProducer接口的类对象。Image createImage(int width, int height);方法的第二种形式创建并返回一幅具有指定宽度和高度的空白图像。创建图像对象31Java图像处理获取本地图像资源通过java.awt.Toolkit类的静态方法getDefaultToolkit(),获得当前默认的Toolkit(工具包)对象,然后再使用Toolkit类的getI
46、mage()方法,就可以从指定的文件中读取GIF、JPEG或PNG格式的图像数据了。例如:从本机上获取名为myPhoto.gif的文件内容,并将文件中的图像数据生成Image对象myPhoto的语句序列为:String fileName = “myPhoto.gif”;Image myPhoto = olkit.getDefaultToolkit().getImage(fileName);获取图像资源32Java图像处理获取网络图像资源如果要获取的图像资源在网络上,则需要使用URL类来得到图像。Applet类提供了getCodeBase()方法,用以返回一个URL对象,该URL对象代表了app
47、let小程序在网络上地址。通常的做法为:用网络地址与图像文件名组成的字符串生成一个URL对象,然后使用Toolkit类的getImage()方法,读取远程的图像数据,创建对应的图像对象。例如要获取Sun公司的标志图片文件sun_logo.gif:URL url = new URL(“/im/sun_logo.gif”);Image sunLogo = Toolkit.getDefaultToolkit().getImage(url);Java图像处理java.applet.Applet类提供了getImage()方法来实现图像的加载。通过getImage()方法,能够将JPEG、GIF或PNG
48、格式的图像文件转换为Image对象,便于在程序中进行操作。getImage()方法有以下两种重载形式:Image getImage(URL url);/参数url指定了图像资源的位置路径与名称。Image getImage(URL url, String imageName);/参数指定了图像的位置路径及图像文件名称的Image类的一个实例对象。加载图像33Java图像处理Java应用程序中图像的显示要通过调用Graphics类的drawImage()方法来实现。drawImage()方法有6种重载形式,可根据需要任选一种来使用。下面给出drawImage()众多重载方法中的一种:boolea
49、n drawImage(Image imgObj, int left, int top, ImageObserver imgOb);该方法显示由imgObj对象所引用的图像文件,显示区域的左上角坐标为(left,top)。ImgOb是一个实现了ImageObserver接口的类的对象。ImageObserver接口由所有的AWT组件所实现。例如,要显示本机上myPhoto.gif文件中的图像:public void paintComponent(Graphics g)Image myPhoto=Toolkit.getDefaultToolkit().getImage(“myPhoto.gif”
50、);g.drawImage(myPhoto, 90, 60, null);显示图像34Java图像处理【例】在窗口中显示当前目录下card.jpg图像文件的内容。 Java图像处理import java.awt.*;import javax.swing.*;/建立一个JPanel类的子类class DrawImage extendsJPanel/重写paintComponent()方法 public void paintComponent(Graphics g) /调用父类的paintComponent()方法 super.paintComponent(g);/获取图像资源并创建Image对象
51、Image cardImage=Toolkit.getDefaultToolkit().getImage(card.jpg); /将当前图像原始尺寸缩小一半显示 int showWidth=cardImage.getWidth(this)/2; int showHeight=cardImage.getHeight(this)/2; g.drawImage(cardImage,15,10,showWidth,showHeight,this); Java图像处理public class Exa_10_12 extends JFrameDrawImage christmasCard=new DrawImage(); public Exa_10_12(String title) super(title); /设置窗口大小 this.setSize(260,230); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container contentPane=this.getContentPane(); contentPane.add(chri
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024-2030年中国疫苗行业市场发展分析及前景趋势与投资战略研究报告
- 2024-2030年中国电泳技术行业市场发展趋势与前景展望战略分析报告
- 2024-2030年中国电子宠物围栏和围护行业市场发展趋势与前景展望战略分析报告
- 2024-2030年中国电压暂降治理行业市场深度调研及发展趋势与投资前景研究报告
- 2024-2030年中国电动晾衣机行业市场发展分析及前景趋势与投资研究报告
- 2024-2030年中国电力变压器远程监控与诊断行业市场发展趋势与前景展望战略分析报告
- 2024-2030年中国田径自行车行业市场发展趋势与前景展望战略分析报告
- 2024-2030年中国生物基树脂行业市场发展趋势与前景展望战略分析报告
- 2024-2030年中国瓷砖粘合剂行业市场发展趋势与前景展望战略分析报告
- 2024-2030年中国玻璃缓冲系统行业市场发展趋势与前景展望战略分析报告
- 江苏省丹阳市2024届中考二模语文试题含解析
- 监控摄像头维保服务方案
- 30题交银金科产品经理岗位常见面试问题含HR问题考察点及参考回答
- 水电开发与生态保护
- 人机工程学教案
- 健康体检与管理专业医疗质量控制指标(2023年版)
- 医疗器械经营授权委托书
- 动火作业审批表
- 月供分期付款购买合同
- 学生岗位实习工作方案
- 洪泽湖湿地调研报告
评论
0/150
提交评论