第9章 Java在多媒体中的应用.ppt
《第9章 Java在多媒体中的应用.ppt》由会员分享,可在线阅读,更多相关《第9章 Java在多媒体中的应用.ppt(123页珍藏版)》请在课桌文档上搜索。
1、第9章 Java在多媒体中的应用,9.1 利用AWT绘图 9.2 Graphics类的使用 9.3 Font类的使用 9.4 图像处理 9.5 动画图像处理,9.1 利用AWT绘图,这一节中我们主要介绍如何使用Java语言提供的AWT包绘图。java.awt包中提供了用于绘图的API,我们通常称之为2D API。不要以为只有设计绘图程序或游戏软件才会用到Java 2D,其实Java 2D的用途可能远比你想象的更广泛。,其实,只要你的程序有GUI,就很可能会用到Java 2D。因为AWT和Swing的组件常常无法完全适合我们,这个时候自己绘制一部分的GUI就有绝对的必要。甚至,我们还可以用Jav
2、a 2D来绘制自己的组件。实际上,AWT和Swing组件都是透过Java 2D来进行绘制的。,Java 2D API增强了AWT的图形、文本和图像功能,可以开发更为强大的用户接口和新型的Java应用程序。除了更为强大的图形、字体和图像API外,Java 2D API还改进了颜色的定义与复合及对任意几何形状和文本的选中检测,并为打印机和显示设备提供了统一的绘制模式。Java 2D API还可以创建高级图形库,并可创建图像和图形文件读/写过滤器。当与Java媒体框架(JMF)和其他Java媒体应用程序配合使用时,Java 2D API还可用来创建和显示动画和其他多媒体演示稿。,到底Java 2D
3、API有多强大?这一点我们可以通过SUN JDK包中提供的例程来了解。在命令行窗口下输入:c:cd jdk1.2demojfcJava2D c:jdk1.2demojfcJava2Djava-classpath Java2Demo.jar Java2Demo 或 c:jdk1.2demojfcJava2Dappletviewer java2demo.html 看到了吗?Java 2D神奇的威力!,下面我们来学习如何使用Java 2D绘图。上面看到的例子虽然功能十分强大,但是它的实现非常复杂。下面,我们先从简单一点的入手。从java.awt.Component类(所有窗口对象的基类)继承的类提供
4、了一个名为paint()的方法,在需要重新绘制组件时,可调用该方法。paint()方法只有一个参数,该参数是Graphics类的实例。如果在某个继承了Component的类中覆盖了该方法,那么就可以使用该方法来控制在控制区域着何种颜色。例如,下面的类创建了一个带有蓝背景的面板。,例9.1 BluePanel.javaimport java.awt.*;class BluePanel extends Panelpublic static void main(String args)Frame f=new Frame();BluePanel p=new BluePanel();f.add(p);f
5、.setSize(300,100);f.setVisible(true);,/Invoked when the panel needs to be repaintedpublic void paint(Graphics g)/Get the rectangle that represents the viewable area/of the panelRectangle rect=g.getClipBounds();/Set the context to paint in a pre-defined colorg.setColor(Color.blue);/Fill the rectangle
6、 with the current colorg.fillRect(rect.x,rect.y,rect.width,rect.height);程序运行结果如图9.1所示。,图 9.1,9.2 Graphics类的使用,java.awt中提供了一系列的类用于绘制图形。其中,Color类包含了编辑颜色的方法和常量;Font类包含了编辑字体的方法和常量;FontMetrics类包含了获取字体信息的方法;Polygon类包含了创建多边形的方法;Toolkit类提供了从系统获得图形信息的方法,例如可显示的字体集和屏幕分辨率等等;Graphics类包含了绘制字符串、线条以及各种几何图形的方法。,Grap
7、hics是一个抽象类,其作用是定义一个真正的工具,用来接受图形操作。在该类中,有47个公用方法,可以用作显示图像和文本、绘制和填充形状、剪贴图像操作等等。9.2.1 绘制字符串、字符和字节 用于绘制字符串、字符和字节的方法分别为 public abstract void drawString(String string,int x,int y)在坐标(x,y)处以当前字体和颜色绘制指定的字符串string。,public void drawChars(char chars,int offset,int number,int x,int y)在坐标(x,y)处以当前字体和颜色绘制指定的一系列字符
8、。chars为要绘制的字符组,offset为位置的坐标,number为要绘制的元素个数。public void drawBytes(byte bytes,int offset,int number,int x,int y)在坐标(x,y)处以当前字体和颜色绘制指定的一系列字节。bytes为要绘制的字节数组,offset为位置的坐标,number为要绘制的元素个数。,下面的例子展示了如何使用了drawString(),drawChars()和drawBytes()三个方法:例9.2 DrawSCB.java import java.awt.*;public class DrawSCB exten
9、ds Frame String s=Using drawString!;char c=c,h,a,r,s,8;byte b=b,y,t,e,1,2,3;,public static void main(String args)DrawSCB frame=new DrawSCB();frame.setSize(300,100);frame.setVisible(true);public void paint(Graphics g)g.drawString(s,100,40);g.drawChars(c,0,7,100,65);g.drawBytes(b,0,5,100,90);程序运行结果如图9
10、.2所示。,图 9.2,9.2.2 颜色控制 Color类定义了颜色常量和方法。每种颜色都是从RGB(红/绿/蓝)值创建出来的。一个RGB值有三部分,都是从0255的整数值,分别代表着三种颜色的含量。因此,实际上我们可以使用256256256种颜色,即224种颜色。这就是我们常说的24位真彩色。但不是任何计算机都可以显示所有的颜色,就目前来说,大部分计算机都可以显示24位甚至超过24位的彩色。显然,我们很难记住一种颜色的RGB值,因而,Color类将一些最常用的颜色预定义为常量以方便我们使用。表9.1列出了预定义的颜色常量。,表9.1 Color类中定义的颜色常量,Color类中常用的一些方法
11、如下:public Color(int r,int g,int b):创建指定RGB值的颜色。public int getRed():返回红色含量的值。public int getBlue():返回蓝色含量的值。public int getGreen():返回绿色含量的值。Graphics类与Color类相关的常用方法有:public abstact Color getColor():返回图形上下文的当前颜色。public abstract void setColor(Color c):设置图形上下文的当前颜色。,下面来看一个颜色控制的实例。例9.3 ShowColor.javaimport
12、java.awt.*;public class ShowColor extends Frameint red,green,blue;public static void main(String args)ShowColor frame=new ShowColor();frame.setSize(300,100);frame.setVisible(true);public ShowColor(),red=200;green=100;blue=0;public void paint(Graphics g)g.setColor(new Color(red,green,blue);g.drawStri
13、ng(Draw color string.,50,40);Color color=g.getColor();,g.drawString(Red:+color.getRed(),10,70);g.drawString(Green:+color.getGreen(),100,70);g.drawString(Blue:+color.getBlue(),200,70);程序运行结果如图9.3所示。,图 9.3,9.2.3 绘制几何图形 Graphics类中用于绘制几何图形的方法如下:public abstract void drawLine(int x1,int y1,int x2,int y2)在
14、点(x1,y1)和(x2,y2)之间用当前颜色绘制线段。public void drawRect(int x,int y,int width,int height)以点(x,y)为左上角坐标,width和height为宽度和高度,用当前颜色画矩形。public abstact void fillRect(int x,int y,int width,int height),以点(x,y)为左上角坐标,width和height为宽度和高度,用当前颜色画一个实心的矩形。public abstact void clearRect(int x,int y,int width,int height)以点(
15、x,y)为左上角坐标,width和height为宽度和高度,用当前背景颜色画一个实心的矩形。此方法用于清除某个矩形显示区域。public abstact void drawRoundRect(int x,int y,int width,int height,int arcWidth,int arcHeight)以点(x,y)为左上角坐标,width和height为宽度和高度,用当前颜色画圆角矩形。,public abstact void fillRoundRect(int x,int y,int width,int height,int arcWidth,int arcHeight)以点(x,
16、y)为左上角坐标,width和height为宽度和高度,用当前颜色画一个实心的圆角矩形。public void draw3Drect(int x,int y,int width,int height,boolean b)用指定的width和height,以当前颜色画一个三维矩形。矩形的左上角坐标为(x,y)。当b为true时,矩形为凸的;b为false时,矩形为凹的。,public void fill3Drect(int x,int y,int width,int height,boolean b)用指定的width和height,以当前颜色画一个填充的三维矩形。矩形的左上角坐标为(x,y)。
17、当b为true时,矩形为凸的;b为false时,矩形为凹的。public abstract void drawOval(int x,int y,int width,int height)用指定的width和height,以当前颜色画椭圆。外切矩形的左上角坐标为(x,y)。public abstract void fillOval(int x,int y,int width,int height)用指定的width和height,以当前颜色画实心椭圆。外切矩形的左上角坐标为(x,y)。,public abstract void drawArc(int x,int y,int width,int
18、height,int startAngle,int arcAngle)参考外切矩形的左上角坐标(x,y),用指定的width和height,以当前颜色绘制一段弧。弧段从起始角startAngle开始一直到张角arcAngle。public abstract void fillArc(int x,int y,int width,int height,int startAngle,int arcAngle)参考外切矩形的左上角坐标(x,y),用指定的width和height,以当前颜色绘制一段实心的弧。弧段从起始角startAngle开始一直到张角arcAngle。,public abstract
19、 void drawPolygon(int xPoints,int yPoints,int points)以当前颜色画一个具有points个顶点的多边形。xPoint和yPoint数组分别指定了每个顶点的x和y坐标。public void drawPolygon(Polygon p)以当前颜色画指定的多边形。,public abstract void fillPolygon(int xPoints,int,yPoints,int points)以当前颜色画一个具有points个顶点的填充多边形。xPoint和yPoint数组分别指定了每个顶点的x和y坐标。下面我们通过一个例子来学习这些方法。,
20、例9.4 DrawDemo.javaimport java.awt.*;public class DrawDemo extends Framepublic static void main(String args)DrawDemo frame=new DrawDemo();frame.setSize(400,500);frame.setVisible(true);public void paint(Graphics g),/draw a lineg.drawLine(10,30,200,40);/draw a rectangleg.drawRect(10,50,100,50);/draw a
21、filled rectangleg.fillRect(150,50,100,50);/draw a rounded rectangleg.drawRoundRect(10,120,50,50,10,20);/draw a filled rounded rectangleg.fillRoundRect(80,120,50,50,40,20);/draw a ellipse,g.drawRoundRect(150,130,80,20,70,70);/draw a filled squareg.drawRoundRect(250,120,50,50,0,0);/draw a circleg.draw
22、RoundRect(330,120,50,50,50,50);g.setColor(Color.yellow);/draw a raised 3D rectangleg.draw3DRect(10,190,50,50,true);/draw a sunk 3D rectangleg.draw3DRect(100,190,50,50,false);,/draw a filled raised 3D rectangleg.fill3DRect(200,190,50,50,true);/draw a filled sunk 3D rectangleg.fill3DRect(300,190,50,50
23、,false);g.setColor(Color.black);/draw an ovalg.drawOval(10,260,70,50);/draw an filled ovalg.fillOval(200,260,50,70);/draw an arcg.drawArc(10,350,60,60,0,180);,/draw solid arcg.fillArc(100,350,50,60,0,270);g.fillArc(200,350,50,60,0,-110);g.fillArc(300,350,40,60,0,-360);/draw a polygonint xPoints1=10,
24、30,40,20,10,5,10;int yPoints1=430,430,440,460,460,440,430;g.drawPolygon(xPoints1,yPoints1,7);,/draw a filled polygonint xPoints2=100,120,130,110,100,95,90,100;int yPoints2=430,430,440,460,460,440,420,430;g.fillPolygon(xPoints2,yPoints2,8);程序运行结果如图9.4所示。,图 9.4,9.2.4 屏幕操作 本节介绍一种实现屏幕操作的Graphics方法copyAr
25、ea()。copyArea()方法用于复制屏幕的一个区域,并将它放置在屏幕的另一个位置上。copyArea方法的定义如下:public abstract void copyArea(int x,int y,int width,int height,int dx,int dy)其中,参数x和y指定了复制区域的左上角坐标;width和height为区域的宽和高;dx和dy指定了与点(x,y)的水平和垂直偏移量,复制的区域放置在该偏移量相对于(x,y)的位置上。,例9.5 CopyAreaDemo.javaimport java.awt.*;public class CopyAreaDemo ext
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第9章 Java在多媒体中的应用 Java 多媒体 中的 应用
![提示](https://www.desk33.com/images/bang_tan.gif)
链接地址:https://www.desk33.com/p-756201.html