第7章图形图像和多媒体.ppt

上传人:本田雅阁 文档编号:2094463 上传时间:2019-02-13 格式:PPT 页数:44 大小:622.51KB
返回 下载 相关 举报
第7章图形图像和多媒体.ppt_第1页
第1页 / 共44页
第7章图形图像和多媒体.ppt_第2页
第2页 / 共44页
第7章图形图像和多媒体.ppt_第3页
第3页 / 共44页
亲,该文档总共44页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《第7章图形图像和多媒体.ppt》由会员分享,可在线阅读,更多相关《第7章图形图像和多媒体.ppt(44页珍藏版)》请在三一文库上搜索。

1、图形、图象与多媒体,本章重点 设置字型 设置颜色 几何图形绘制方法 图像显示技术基础,绘图基础,基本图形包括点、线、圆、矩形等,是构成复杂图形的基础。绘制基本图形要使用AWT中的Graphics类,它提供了各种基本图形的绘制方法,可以直接引用这些方法。 确定平面坐标系,坐标原点(0,0)位于整个区域的左上角。一个坐标点对应屏幕上的一个像素,必须是整数。,Graphics类的基本功能,java.awt包中的Graphics提供建立字体、设定颜色、显示图像、文本、绘制和填充各种图形的功能。 Graphics2D类继承Graphics提供更多的状态和属性,使应用程序能绘制出更加丰富多彩的图形。 要在

2、某个组件中绘图,需要在这个组件所属的类中重写paint()方法,在该方法中绘图。 如果要在JComponent子类的组件中绘图,则需重写paintComponent()方法,自型和颜色,绘制文本的方法有三种: 在指定的位置绘制字符串 drawString(String str, int x, int y) g.drawString(“中国Wxyz“, 10, 60);,10,60,字型和颜色,文字字型有三个要素:字体(name)、风格(style)、字号(size) 字体:宋体,黑体,Times New Roman等 风格:Font.PLAIN(正常), Font.BOLD(粗体), Font

3、.ITALIC(斜体), Font.BOLD+ Font.ITALIC 字号: 整数,单位是磅 Java中Font类的对象代表字体 Font font = new Font(“宋体”, Font.PLAIN, 12); 绘图时使用Graphics对象的setFont方法设置字体,字型和颜色,Java中使用Color类设置颜色,生成颜色的方法有两种。 使用预定义的颜色:Color.RED, Color.YELLOW等 通过红绿蓝(RGB)的值合成颜色,例如使用3个0-255的整数创建对象 Color c = new Color(255,0,0); 绘图时使用Graphics对象的setColor

4、()方法设置颜色,使用Component对象的setBackground()方法设置背景色。,绘图模式,绘图模式指绘制的图形与之前绘制的图形有重叠时,重叠部分的颜色如何确定。 正常模式:后绘制的图形覆盖原先的图形。setPaintMode() 异或模式:将正要绘图的颜色、原先图形的颜色和设定的颜色做特定的运算,得到实际的绘图颜色。setXORMode(),g.setColor(Color.BLUE); g.drawString(“dsbdsfsfs“,20,50); g.setColor(Color.YELLOW); g.fillRect(10,10,100,50);,g.setColor(C

5、olor.BLUE); g.drawString(“dsbdsfsfs“,20,50); g.setColor(Color.YELLOW); g.fillRect(10,10,100,50);,XOR绘图模式,setBackground(Color.yellow);/设此颜色为B g.setXORMode(Color.red);/设此颜色为C g.setColor(Color.green);/设此颜色为D 规则1:用背景色画图出现设置的颜色C B + B = C setBackground(Color.yellow); g.setXORMode(Color.red); g.setColor(C

6、olor.YELLOW); g.fillRect(20,20,80,40);,红色,XOR绘图模式,规则2:一个图形重画时会清除原有图形 D + D = B setBackground(Color.yellow); g.setXORMode(Color.red); g.setColor(Color.BLUE); g.fillRect(20,20,80,40); g.fillRect(20,20,80,40);,清除,XOR绘图模式,规则3:背景色和绘图颜色不一样时,为两者的混合色 B + D = B和D的混合色 setBackground(Color.yellow); g.setXORMode

7、(Color.red); g.setColor(Color.BLUE); g.fillRect(20,20,80,40);,黄+蓝,XOR绘图模式,规则4:某区已经用D着色,再用E着色 D + E = B和E的混合色(B和E不同) setBackground(Color.yellow); g.setXORMode(Color.red); g.setColor(Color.BLUE); g.fillRect(20,20,80,40); g.setColor(Color.GREEN); g.fillRect(20,20,40,40);,黄+蓝+绿,Graphics的绘图方法,画线段 drawLin

8、e(int x1, int y1, int x2, int y2) 普通矩形 drawRect(int x, int y, int width, int height)用线框围起来的矩形 fillRect(int x, int y, int width, int height)填充矩形 圆角矩形 drawRoundRect(int x,int y,int width,int height, int arcW,int arcH)用线框围起来的圆角矩形 fillRoundRect(int x,int y,int width,int height, int arcW,int arcH)填充圆角矩形

9、如果后四个参数相等,画出来的是圆形。,Graphics的绘图方法,三维矩形 draw3DRect(int x, int y, int width, int height, boolean raised) fill3DRect(int x, int y, int width, int height, boolean raised) raised为true表示突出的,false是凹陷的 画椭圆 drawOval(int x,int y,int width,int height) fillOval(int x,int y,int width,int height) 画以(x,y)为原点,即矩形的左上

10、角,宽为width,高为height的矩形的内切椭圆。,Graphics的绘图方法,画圆弧 drawArc(int x, int y, int width, int height, int startAngle, int arcAngle) fillArc(int x, int y, int width, int height, int startAngle, int arcAngle) 得到的弧由 startAngle 开始,并以当前颜色转 arcAngle 度。角度的 0 度位于 3 点钟位置。正值指示逆时针旋转,负值则指示顺时针旋转。 g.drawRect(5,5,100,50); g.

11、drawArc(5,5,100,50,0,360); g.drawRect(5,5,100,50); g.drawArc(5,5,100,50,0,-270); g.drawRect(5,5,100,50); g.drawArc(5,5,100,50,90,90);,Graphics的绘图方法,画多边形 drawPolygon(int xPoints, int yPoints, int nPoints) fillPolygon(int xPoints, int yPoints, int nPoints) int px1 = 50,90,10,50; int py1 = 10,50,50,10;

12、 g.fillPolygon(px1,py1,4);,(50,10),(90,50),(10,50),Graphics的绘图方法,使用Polygon类创建多边形。 Polygon p = new Polygon(); p.addPoint(50,10); p.addPoint(90,50); p.addPoint(10,50); p.addPoint(50,10); g.fillPolygon(p);,(50,10),(90,50),(10,50),Graphics的绘图方法,擦除矩形块 用背景色填充一个矩形块,相当于擦除矩形块位置的图形 clearRect(int x, int y, int

13、 width, int height),(50,10),(90,50),(10,50),int px1 = 50,90,10,50; int py1 = 10,50,50,10; g.fillPolygon(px1,py1,4); g.clearRect(35,30,15,15);,clipRect,限定作图显示区域,区域内的图形可以显示 clipRect(int x, int y, int width, int height),g.setColor(Color.YELLOW); g.fillRect(10,10,100,100);,g.clipRect(20,20,50,50); g.set

14、Color(Color.YELLOW); g.fillRect(10,10,100,100);,复制图形,copyArea(int x, int y, int width, int height, int dx, int dy) x - 源矩形的 x 坐标。 y - 源矩形的 y 坐标。 width - 源矩形的宽度。 height - 源矩形的高度。 dx - 水平偏移,右为正,左为负 dy - 垂直偏移,下为正,上为负,g.setColor(Color.YELLOW); g.fillRect(0,0,100,100); g.setColor(Color.red); g.drawRect(3

15、0,30,50,50); g.copyArea(30,30,50,50,100,100);,paint,repaint,update方法,paint:应该绘制组件的内容时调用此方法;组件第一次在屏幕上显示,组件的大小改变了,部件显示的内容受损需要维护。(比如,先前挡住组件的其它物体移走了,于是组件被挡住的部分曝露出来) repaint:对于重量级组件(JFrame,JApplet,JDialog和awt组件),先调用update方法,在update方法中实现部分图形的修改,然调用paint方法。对于轻量级(JComponent的子孙)组件调用paint方法,Graphics2D类的绘图方法,j

16、ava.awt.Graphics2D拥有更强大二维的图形处理能力,提供坐标变换、颜色管理以及文字布局等更精确的控制。 public abstract class Graphics2D extends Graphics,Stroke属性,Stroke属性控制线条的宽度,笔形的样式,线段连接方式或短划线图案。该属性的设置需要创建BasicStroke对象,再调用setStroke()方法来设置。,cap样式:,join样式:,public void paint(Graphics g) Graphics2D g2d = (Graphics2D)g; Line2D line = new Line2D.

17、Double(30.0, 10.0, 180.0, 10.0); g2d.draw(line); BasicStroke bs = new BasicStroke(20f,BasicStroke.CAP_BUTT,BasicStroke.JOIN_ROUND); g2d.setStroke(bs); Line2D line2= new Line2D.Double(30.0, 40.0, 180.0, 40.0); g2d.draw(line2); bs = new BasicStroke(20f,BasicStroke.CAP_SQUARE,BasicStroke.JOIN_ROUND); g

18、2d.setStroke(bs); Line2D line3 = new Line2D.Double(30.0, 80.0, 180.0, 80.0); g2d.draw(line3); bs = new BasicStroke(20f,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND); g2d.setStroke(bs); Line2D line4 =new Line2D.Double(30.0, 120.0, 180.0, 120.0); g2d.draw(line4); ,public void paint(Graphics g) bs = ne

19、w BasicStroke(20f,BasicStroke.CAP_BUTT,BasicStroke.JOIN_ROUND); g2d.setStroke(bs); int x = 30,160,200; int y = 160,400,200; g2d.setColor(Color.GREEN); g2d.drawPolygon(x,y,3); ,JOIN_ROUND,JOIN_MITER,JOIN_BEVEL,paint属性,paint属性控制填充效果。,BasicStroke bs = new BasicStroke(5.5f); g2d.setStroke(bs); GradientP

20、aint gp = new GradientPaint(30.0f, 30.0f, Color.RED, 180.0f, 30.0f,Color.GREEN); g2d.setPaint(gp); Line2D line = new Line2D.Double(30.0, 30.0, 180.0, 30.0); g2d.draw(line);,transform属性,Transform属性用来实现常用图形的平移、缩放、旋转和斜切变换等操作。 旋转变换,AffineTransform rotate = AffineTransform.getRotateInstance(Math.PI/2, 30

21、.0, 30.0); g2d.setTransform(rotate); Line2D line = new Line2D.Double(30.0, 30.0, 180.0, 30.0); g2d.draw(line);,AffineTransform rotate = new AffineTransform(); rotate.rotate(Math.PI / 2, 30.0, 150.0); g2d.setTransform(rotate); Line2D line = new Line2D.Double(30.0, 30.0, 180.0, 30.0); g2d.draw(line);,

22、transform属性,缩放,AffineTransform scale = AffineTransform.getScaleInstance(2,2); g2d.setTransform(scale); Line2D line = new Line2D.Double(30.0, 30.0, 180.0, 30.0); g2d.draw(line);,transform属性,平移,AffineTransform transform = AffineTransform.getTranslateInstance(10,50); g2d.setTransform(transform); Line2D

23、 line = new Line2D.Double(30.0, 30.0, 180.0, 30.0); g2d.draw(line);,transform属性,斜切,AffineTransform shear = AffineTransform.getShearInstance(5,2); g2d.setTransform(shear); Line2D line = new Line2D.Double(30.0, 30.0, 180.0, 30.0); g2d.draw(line);,clipe属性,clipe属性用于实现剪裁的效果,区域内可见 Line2D line = new Line2D

24、.Double(30.0, 30.0, 180.0, 30.0); g2d.setClip(30, 30, 160, 30); g2d.draw(line);,Composit属性,Composit设置图形重叠区的效果 AlphaComposite a = AlphaComposite.getInstance(int rule,float alpha); Alpha为0表示透明,1.0表示不透明,Graphics2D的绘图方法,Graphics2D类保留了Graphics类的绘图方法,同时增加了一些新方法。新方法把几何形状作为对象来绘制,在java.awt.geom包中声明的一系列类,分别用于

25、创建各种几何图形。 public void paint(Graphics g) /将参数g强制类型转换成Graphics2D类型 Graphics2D g2d = (Graphics2D)g; /使用图形类的静态Double方法创建几何图形对象 Line2D line = new Line2D.Double(30.0, 30.0, 180.0, 30.0); /以图形对象为参数,调用Graphics2D对象的draw方法绘制图形 g2d.draw(line); ,Graphics2D的几何图形类,线段 起点(30,30),终点(180 , 30) Line2D line = new Line2

26、D.Double(30, 30, 180, 30); g2d.draw(line);,public abstract class Line2D implements Shape, Cloneable public static class Double extends Line2D public Double(double X1, double Y1, double X2, double Y2) . ,Graphics2D的几何图形类,矩形 左上角点坐标(20,20),宽100,高50 Rectangle2D rect = new Rectangle2D.Double(20,20,100,50

27、); g2d.draw(rect); g2d.fill(rect);,Graphics2D的几何图形类,圆角矩形 左上角点坐标(20,20),宽100,高50,圆角横向直径20,纵向直径40 RoundRectangle2D roundRect = new RoundRectangle2D.Double(20,20,100,50,20,40) ; g2d.draw(roundRect);,Graphics2D的几何图形类,椭圆 左上角点(20,30),宽100,高50矩形的内切椭圆 Ellipse2D ellipse = new Ellipse2D.Double(20,30,100,50);

28、g2d.draw(ellipse);,Graphics2D的几何图形类,圆弧 左上角坐标(20,30),宽100,高50矩形的内切圆弧,90度开始, 逆时针转90度 Arc2D arc = new Arc2D.Double(20,30,100,50,90,90,Arc2D.OPEN); g2d.draw(arc); Arc2D arc2 = new Arc2D.Double(20,30,100,50,0,-90,Arc2D.CHORD); g2d.draw(arc2); Arc2D arc3 = new Arc2D.Double(20,30,100,50,0,90,Arc2D.PIE); g2

29、d.draw(arc3);,二次曲线,一条二次曲线需要三个点确定:始点、控制点和终点 起点(20,10),控制点(90,65),终点(55,115) QuadCurve2D qc = new QuadCurve2D.Double(20,10,90,65,55,115); QuadCurve2D qc2 = new QuadCurve2D.Double(20,10,15,63,55,115); QuadCurve2D qc3 = new QuadCurve2D.Double(20,10,54,64,55,115); g2d.draw(qc); g2d.draw(qc2); g2d.draw(qc

30、3);,三次曲线,一条三次曲线需要四个点确定:始点、两个控制点和终点 起点(12,30),控制点(50,75),(15,15),终点(115,93) CubicCurve2D c1 =new CubicCurve2D.Double(12,30,50,75,15,15,115,93); CubicCurve2D c2 =new CubicCurve2D.Double(12,30,15,70,20,25,35,94); CubicCurve2D c3 =new CubicCurve2D.Double(12,30,50,75,20,95,95,95); g2d.draw(c1); g2d.draw(

31、c2); g2d.draw(c3);,图像处理基础,图像是由一组像素构成,用二进制形式保存的图片。Java语言支持GIF,JPEG,BMP这三种图像文件格式。 Java语言的图像处理功能被封装在Image中。,图像的载入和绘制,public class ImageDemo extends Applet public void paint(Graphics g) /图像位置为Applet所在文件夹下的pic子文件夹下的gugu3.gif Image image = getImage(getCodeBase(),“picgugu3.gif“); /在当前窗口坐标(10,10)的位置绘制图像 g.d

32、rawImage(image,10,10,this); ,图像的载入和绘制,public class ImageDemo extends Applet public void paint(Graphics g) URL url = null; try url = new URL(this.getCodeBase(),“picgugu3.gif“); catch (MalformedURLException e) e.printStackTrace(); Image image = getImage(url); g.drawImage(image,10,10,this); ,图像缓冲,把图像装入内存,在缓冲区中绘制图像或图形,然后将缓冲区中绘制好的图像一次性输出到屏幕上。,

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1