JAVA 图形图像与多媒体详解.docx

上传人:b****4 文档编号:5195684 上传时间:2022-12-13 格式:DOCX 页数:30 大小:410.46KB
下载 相关 举报
JAVA 图形图像与多媒体详解.docx_第1页
第1页 / 共30页
JAVA 图形图像与多媒体详解.docx_第2页
第2页 / 共30页
JAVA 图形图像与多媒体详解.docx_第3页
第3页 / 共30页
JAVA 图形图像与多媒体详解.docx_第4页
第4页 / 共30页
JAVA 图形图像与多媒体详解.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

JAVA 图形图像与多媒体详解.docx

《JAVA 图形图像与多媒体详解.docx》由会员分享,可在线阅读,更多相关《JAVA 图形图像与多媒体详解.docx(30页珍藏版)》请在冰豆网上搜索。

JAVA 图形图像与多媒体详解.docx

JAVA图形图像与多媒体详解

第7章图形、图像与多媒体

7.1绘图基础

要在平面上显示文字和绘图,首先要确定一个平面坐标系。

Java语言约定,显示屏上一个长方形区域为程序绘图区域,坐标原点(0,0)位于整个区域的左上角。

一个坐标点(x,y)对应屏幕窗口中的一个像素,必须是整数。

如图7.1所示。

 

窗口大小由超文本文件中的width和height指定。

例如,以下超文本确定窗口宽为250像素,高位400像素:

7.1.1Graphics类的基本功能

在java.awt包中,类Graphics提供的功能有:

建立字体、设定显示颜色、显示图像和文本,绘制和填充各种几何图形。

可以从图形对象或使用Component的getGraphics()方法得到Graphics对象。

Graphics2D类继承Graphics类,并且增加了许多状态属性,使应用程序可以绘制出更加丰富多彩的图形。

在某个组件中绘图,一般应该为这个组件所需的子类重写paint(0方法,在该重写的方法中进行绘图。

但要在JComponent子类的组件中绘图,应重写paintComponent()方法,在该方法中进行绘图。

例如,继承定义一个文本区子类,要在这样的文本区对象中绘图,就应给这个文本区子类重写paintComponent()方法。

系统自动为程序通过图形对象,并以参数g传递给paint()方法和paintComponent()方法。

7.1.2字型和颜色

显示文字的方法主要有三种:

(1)drawString(Stringstr,intx,inty),在指定的位置显示字符串。

(2)drawChar(chardate[],intoffset,intlength,intx,inty),在指定的位置显示字符数组中的文字,从字符数组的offset开始,最多显示length个字符。

(3)drawBytes(chardate[],intoffset,intlength,intx,inty),在指定的位置显示字节数组中的文字,从字节数组的offset开始,最多显示length个字符。

这里给出的显示位置(x,y)为文字的基线的开始坐标,不是文字显示的矩形区域的左上角坐标。

文字字型有三个要素:

字体、风格和字号。

常用的字体有TimesNewRoman、Symbol、宋体、楷体等。

常用的风格有三种:

正常、粗体和斜体,分别用三个常量表示:

Font.PLAIN(正常)、Font.BOLD(粗体)和Font.ITALIC(斜体)。

风格可以组合使用,例如,Font.BOLD+Font.ITALIC。

字号是字的大小,单位是磅。

在Java语言中,用类Font对象设置字型。

Font类的构造方法有:

Font(StringfontName,intstyle,intsize),3个参数分别表示字体、风格和字号。

例如,代码:

FontfnA=newFont(“细明体”,Font.PLAIN,12)

设置的字型是:

细明体、正常风格,12磅字号。

Font类的其他常用方法:

(1)getStyle(),返回字体风格。

(2)getSize(),返回字体大小。

(3)getName(),返回字体名称。

(4)isPlain(),测试字体是否是正常字体。

(5)isBold(),测试字体是否是粗体。

(6)isItalic(),测试字体是否是斜体。

使用Graphics的方法setFont(Fontfont)设置字型。

【例7.1】小应用程序用6种字型显示字符串,显示内容说明本身的字型。

importjava.applet.*;importjava.awt.*;

publicclassExample7_1extendsApplet{

Fontf1=newFont("Helvetica",Font.PLAIN,18);

Fontf2=newFont("Helvetica",Font.BOLD,10);

Fontf3=newFont("Helvetica",Font.ITALIC,12);

Fontf4=newFont("Helvetica",Font.ITALIC,12);

Fontf5=newFont("Courier",Font.BOLD+Font.ITALIC,14);

Fontf6=newFont("Dialog",Font.ITALIC,14);

publicvoidpaint(Graphicsg){

g.setFont(f1);g.drawString("18ptplainHelvetica",5,20);

g.setFont(f2);g.drawString("10ptboldHelvetica",5,43);

g.setFont(f3);g.drawString("12ptitalicHelvetica",5,58);

g.setFont(f4);g.drawString("12ptplainCourier",5,75);

g.setFont(f5);g.drawString("14ptbold&italicTimesRoman",5,92);

g.setFont(f6);g.drawString("14ptitalicDialog",5,111);

}

}

 

用类Color的对象设置颜色,有两种方法生成各种颜色。

一是用类Color预定义的颜色:

black、red、white、yellow……;二是通过红绿蓝(RGB)的值合成颜色。

与颜色有关的常用方法:

(1)用类Color的构造方法Color(intR,intG,intB)创建一个颜色对象,参数R、G、B分别表示红色、绿色和蓝色,它们的取值是从0到255。

(2)用类Graphics的方法setColor(Colorc),参数c的取值参见表7-1。

(3)用类Component的方法setBackground(Colorc)设置背景颜色。

因为小程序是组件的子类,直接可用setBackground()方法改变背景色。

(4)用类Graphics的方法getColor()获取颜色。

表7-1Color类预定义颜色常量

black

blue

cyan

darkGray

gray

green

lighGray

magenta

orange

pink

red

while

yellow

【例7.2】小应用程序设置颜色并涂方块,其中绘制方块的方法参见7.2节。

importjava.applet.*;

importjava.awt.*;

publicclassExample7_2extendsApplet{

publicvoidpaint(Graphicsg){

setSize(380,200);

for(inti=0;i<=10;i++){

Colormyredcolor=newColor(i*25+5,0,0);

g.setColor(myredcolor);

g.fillRect(i*32+5,2,28,28);//用指定的颜色填充方块

}

for(inti=0;i<=10;i++){

Colormygreencolor=newColor(0,i*25+5,0);

g.setColor(mygreencolor);

g.fillRect(i*32+5,32,28,28);//用指定的颜色填充方块

}

for(inti=0;i<=10;i++){

Colormybluecolor=newColor(0,0,i*25+5);

g.setColor(mybluecolor);

g.fillRect(i*32+5,62,28,28);//用指定的颜色填充方块

}

}

}

 

 

7.1.3绘图描述

绘图模式是指后绘制的图形与早先绘制的图形有重叠时,然后确定重叠部分的颜色。

例如,后绘制的覆盖早先绘制的;或者后绘制与早先绘制的两种颜色按某种规则混合。

主要有正常模式和异或模式两种:

●正常模式:

是指后绘制的图形覆盖绘制在早先绘制的图形之上,使早先绘制的图形的重叠部分不可再见。

●异或模式:

是指把绘图看作是按图形着色。

异或模式绘图时,将当前正要绘图的颜色、原先绘制的颜色以及异或模式设定的颜色作特定的运算,得到实际绘图颜色。

设置绘图模式的方法有:

(1)setPaintMode(),设置绘图模式为覆盖模式(正常模式)。

正常模式是绘图的默认模式。

(2)setXORMode(Color),设置绘图模式为异或模式,参数c为异或模式设定的绘图颜色。

设背景色为B,用setXORMode()设置的颜色为C,另用某个背景色D绘图,XOR模式有以下确定实际绘图颜色的法则:

B+B=C,用背景色绘图,出现C颜色。

D+D=B,当一个图形重画时就能清除原先所画的图形。

B+D=B和D的混合色(当B,D不相同时)。

如果某区域已用D着色,再用E着色,则结果是:

D+E=D和E的混合色(当D、E不相同时)。

XOR绘图模式实例参见7.2.1节的例7.4。

 

7.2绘图

Graphics类提供基本绘图方式,Graphics类提供更强大的绘图能力。

7.2.1Graphics类的绘图方法

Graphics类提供基本的几何图形绘制方法,主要有:

画线段、画矩形、画圆、画带颜色的图形、画椭圆、画圆弧、画多边形等。

(1)画线段

在窗口中画一条线段,可以使用Graphics类的drawLine()方法:

●drawLine(intx1,inty1,intx2,inty2)

例如,以下代码在点(3,3)与点(50,50)之间画线段,在点(100,100)处画一个点。

g.drawLine(3,3,50,50);画一条线段

g.drawLine(100,100,100,100);画一个点

(2)画矩形

有两种矩形:

普通型和圆角型。

画普通矩形有两种方法:

●drawRect(intx,inty,intwidth,intheight)

画线框围起来的矩形。

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

●fillRect(intx,inty,intwidth,intheight)

用预定的颜色填充一个矩形,得到一个着色的矩形块。

以下代码是画矩形的例子:

g.drawRect(80,100,40,25);//画线框

g.setColor(Color.yelloe);

g.fillRect(20,20,20,30);//画着色块

画圆角矩形也有两个方法:

●drawRoundRect(intx,inty,intwidth,intheight,intarcWidth,intarcHeight)

是用线围起来的圆角矩形。

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

●fillRoundRect(intx,inty,intwidth,intheight,intarcWidth,intarcHeight)

是用预定的颜色填充的圆角矩形。

各参数的意义同前一个方法。

以下代码是画矩形的例子:

g.drawRoundRect(10,10,150,70,40,25);//画一个圆角矩形

g.setColor(Color.blue);

g.fillRoundRect(80,100,100,100,60,40);//涂一个画角矩形块

g.drawRoundRect(10,150,40,40,40,40);//画圆

g.setColor(Color.red);

g.fillRoundRect(80,100,100,100,100,100);//涂画块

可以用画圆角矩形方法画圆形,当矩形的宽和高相等,圆角弧的横向直径和圆角弧的纵向直径也相等,并等于矩形的宽和高时,画的就是圆形。

参见上述例子中的注释,前一个是画圆,后一个是涂圆块。

(3)画三维矩形

画三维矩形有两个方法:

●draw3DRect(intx,inty,intwidth,intheight,booleanraised)

画一个突出显示的矩形。

其中参数x和y指定矩形左上角的位置,参数width和height是矩形的宽和高,参数raised是突出与否。

●fill3DRect(intx,inty,intwidth,intheight,booleanraised)

用预订的颜色填充一个突出显示的矩形。

以下代码是画突出矩形的例子:

g.draw3DRect(80,100,40,25,true);//画一个线框

g.setColor(Color.yelloe);

g.fill3DRect(20,70,20,30,ture);//画一个着色块

(4)画椭圆形

椭圆形由椭圆的横轴和纵轴确定。

画椭圆形有两个方法:

●drawOval(intx,inty,intwidth,intheight)

是画用线围成的椭圆形。

其中参数x和y指定椭圆形左上角位置,参数width和height是横轴和纵轴。

●fillOval(intx,inty,intwidth,intheight)

是用预订的颜色填充椭圆形,是一个着色块。

也可以用画椭圆形方法画圆形,当横轴和纵轴相等时,所画的椭圆形即为圆形。

以下代码是画椭圆形的例子。

g.drawOval(10,10,60,120);//画椭圆

g.setColor(Color.cyan);

g.fillOval(100,30,60,60);//涂圆块

g.setColor(Color.magenta);

g.fillOval(15,140,100,50);//涂椭圆

(5)画圆弧

画圆弧有两个方法:

●drawArc(intx,inty,intwidth,intheight,intstartAngle,intarcAngle)

画椭圆的一部分的圆弧线。

椭圆的中心是它的外接矩形的中心,其中参数是外接矩形的左上角坐标(x,y),宽是width,高是height。

参数startAngle和arcAngle的单位是“度”。

起始角度0度是指3点钟方位。

参数startAngle和arcAngle表示从startAngle角度开始,逆时针方向画arcAngle度的弧。

约定,正值度数是逆时针方向,负值度数是顺时针方向,例如-90度是6点钟方位。

●fillArc(intx,inty,intwidth,intheight,intstartAngle,intarcAngle)

用setColor()方法设定的颜色,画着色椭圆的一部分。

以下代码是画圆弧的例子:

g.drawArc(10,40,90,50,0,180);//画圆弧线

g.drawArc(100,40,90,50,180,180);//画圆弧线

g.setColor(Color.yelloe);

g.fillArc(10,100,40,40,0,-270);//填充缺左上角的四分之三椭圆

g.setColor(Color.magenta);

g.fillArc(60,110,110,60,-90,270);//填充缺左下角的四分之三椭圆

g.setColor(Color.blue);

g.fillArc(130,20,40,40,0,360);//填充圆

(6)画多边形

多边形是用多条线段首尾连接而成的封闭平面图。

多边形线段端点的x坐标和y坐标分别存储在两个数组中,画多边形就是按给定的坐标点顺序用直线段将它们连起来。

以下是画多边形常用的两个方法:

●drawPolygon(intxPoints[],inty,intyPoints[],intnPoints)

画一个多边形。

●fillPolygon(intxPoints[],inty,intyPoints[],intnPoints)

用方法setColor()设定的颜色着色多边形。

其中数组xPoints[]存储x坐标点,yPoints[]存储y坐标点,nPoints是坐标点个数。

注意,上述方法并不自动闭合多边形,要画一个闭合的多边形,给出的坐标点的最后一点必须要与第一点相同。

以下代码实现填充一个三角形和画一个八边形。

intpx1[]={50,90,10,50};//首末点相重,才能画出多边形

intpy1[]={10,50,50,10};

intpx2[]={140,180,170,180,140,100,110,100,140};

intpy2[]={5,25,35,45,65,45,35,25,5};

g.setColor(Color.blue);

g.fillPolygon(px1,py1,4);

g.setColor(Color.red);

g.drawPolygon(px2,py2,9);

也可以用多边形对象画多边形。

用多边形类Polygon创建一个多边形对象,然后用这个对象绘制多边形。

Polygon类的主要方法:

1Polygon(),创建多边形对象,暂时没有坐标点。

2Polygon(intxPoints[],inty,intyPoints[],intnPoints[]),用指定的坐标点创建多边形对象。

3addPoint(),将一个坐标点加入到Polygon对象中。

4drawPolygon(Polygonp),绘制多边形。

5fillPolygon(Polygonp),用指定颜色填充多边形。

例如,以下代码,画一个三角形和填充一个黄色的三角形。

注意,用多边形对象画封闭多边形不要求首末点重合。

intx[]={140,180,170,180,140,100,110,100};

inty[]={5,25,35,45,65,45,35,25};

Polygonpolygon1=newPolygon();

polygon1.addPoint(50,10);polygon1.addPoint(90,50);

polygon1.addPoint(10,50);g.drawPolygon(polygon1);

g.setColor(Color.yellow);

Polygonpolygon2=newPolygon(x,y,8);

g.fillPolygon(polygon2);

(7)擦除矩形块

当需要在一个着色图形的中间有一个空缺的矩形块的情况,可用背景色填充一个矩形块实现,相当于在该矩形块上使用了“橡皮擦”。

实现的方法是:

●clearRect(intx,inty,intwidth,intheight)

擦除一个由参数指定的矩形块的着色。

例如,以下代码实现在一个圆中擦除一个矩形块的着色:

g.setColor(Color.blue);

g.setOval(50,50,100,100);

g.clearRect(70,70,40,55);

(8)限定作图显示区域

用一个矩形表示图形的显示区域,要求图形在指定的范围内有效,不重新计算新的坐标值,自动实现超出部分不显示。

方法是:

●clipRect(intx,inty,intwidth,intheight)

限制图形在指定区域内的显示,超出区域的图形不显示。

多个限制区域有覆盖时,得到限制区域的交集区域。

例如,代码:

g.clipRect(0,0,100,50);

g.clipRect(50,25,100,50);

相当于

g.clipRect(50,25,20,25);

(9)复制图形

利用Graphics类的方法copyArea()可以实现图形的复制,其使用格式是:

●copyArea(intx,inty,intwidth,intheight,intdx,intdy)

dx和dy分别表示将图黏贴到原位置偏移的像素点数,正值为往右或往下偏移量,负值为往左或往上偏移量。

位移的参考点是要复制矩形的左上角坐标。

例如,以下代码示意图形的复制,将一个矩形的一部分、另一个图形的全部分别复制。

g.clipRect(10,10,60,90);

g.fillRect(90,10,60,90);

g.copyArea(40,50,60,,70,,-20,,80);

g.copyArea(110,50,60,,60,,10,,80);

【例7.3】小应用程序重写update()方法,只清除圆块,不清除文字。

窗口显示一个不断移动的红色方块。

importjava.applet.*;importjava.awt.*;

publicclassExample7_3extendsApplet{

inti=1;

publicvoidinit(){

setBackground(Color.yellow);

}

publicvoidpaint(Graphicsg){

i=i+8;if(i>160)i=1;

g.setColor(Color.red);

g.fillRect(i,10,20,20);

g.drawString("我正在学习update()方法!

",100,100);

try{

Thread.sleep(100);//程序暂停0.1秒

}

catch(InterruptedExceptione){}

repaint();

}

publicvoidupdate(Graphicsg){

g.clearRect(i,10,200,100);//不清除“我正在学习update()方法!

paint(g);

}

}

一般的绘图程序要继承JFrame,定义一个JFrame窗口子类,还要继承JPanel,定义一个JPanel子类。

在JPanel子类中重定义方法paintcomponent(),在这个方法中调用绘图方法,绘制各种图形。

【例7.4】使用XOR绘图模式的应用程序,绘图效果参见图7.2。

importjava.awt.*;importjavax.swing.*;

publicclassExample7_4extendsJFrame{

publicstaticvoidmain(Stringargs[]){

GraphicsDemomyGraphicsFrame=newGraphicsDemo();

}

}

classShapesPanelextendsJPanel{

ShapesPanel(){

setBackground(Color.white);

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1