1 / 17

第 14 章 图形与图像

第 14 章 图形与图像. 14.1 绘制文本 14.2 绘制基本图形 14.3 建立字体 14.4 清除 14.5 Java 2D 14.6 图形的布尔运算 14.7 绘制钟表 14.8 绘制图像 14.9 制作 JPG 图像 14.10 XOR 绘图模式 14.11 打印图形、图像.

nancy
Télécharger la présentation

第 14 章 图形与图像

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第14章 图形与图像 • 14.1 绘制文本 • 14.2 绘制基本图形 • 14.3 建立字体 • 14.4 清除 • 14.5 Java 2D • 14.6 图形的布尔运算 • 14.7 绘制钟表 • 14.8 绘制图像 • 14.9 制作JPG图像 • 14.10XOR绘图模式 • 14.11 打印图形、图像

  2. Component类有一个方法public void paint(Graphics g),我们可以在其子类中重写这个方法。当重写这个方法时,相应的java运行环境将参数g实例化,对象g就可以在该组件的坐标系内绘制图形、图像等。组件都是矩形形状,组件本身有一个默认的坐标系,组件的左上角的坐标值是(0,0)。如果一个组件的宽是200,高是80,那么,该坐标系中,x坐标的最大值是200,y坐标的最大值是80。

  3. 14.1绘制文本 • drawString(String s, int x, int y) 从参数x、y指定的坐标位置处,从左向右绘制参数s指定的字符串。 • drawChars(char data[],int offset, int length, int x, int y) 绘制data数组中的部分字符,length指定数组中要连续绘制的字符的个数,offset是首字符在数组中的位置。

  4. 14.2绘制基本图形 • 1.直线 • drawLine(int x1,int y1,int x2,int y2) 绘制从起点(x1,y1)到终点(x2,y2)的直线段 • 2.矩形 • drawRect (int x,int y,int w,int h) 绘制矩形 • fillRect (int x,int y,int w,int h) 填充矩形 • 矩形的左上角的坐标由参数x、y指定,矩形的宽和高由参数w,h指定。 • 3.圆角矩形 • drawRoundRect(int x,int y,int w,int h,int arcW,int arcH) 绘制圆角矩形 • fillRoundRect(int x,int y,int w,int h,int arcW,int arcH) 填充圆角矩形 • 参数arcW、arcH指定圆角的尺寸,见图14.1中的4个黑角部分。

  5. 4.椭圆 • drawOval(int x,int y,int w,int h) 绘制椭圆 • fillOval(int x,int y,int w,int h) 填充椭圆 • 其中,参数x、y给出椭圆距x轴和y轴的距离,参数w、h给出椭圆的宽和高。 • 5.圆弧 • 圆弧就是椭圆的一部分。 • drawArc(int x,int y,int width,int height,int starAngle, int arcAngle) 绘制圆弧 • fillArc(int x,int y,int width,int height,int starAngle,int arcAngle) 填充圆弧 • 参数x、y、width、heigth指定椭圆的位置和大小,参数starAngle和 arcAngle的单位都是“度”。而起始角度的0度是3点钟的方位。参数starAngle,arcAngle表示从starAngle的角度开始逆时针或顺时针方向画arcAngle度的弧,当arcAngle是正值时为逆时针,否则为顺时针。starAngle的值可以是负值,例如-90度是6点的方位。

  6. 14.3 建立字体 • setFont(Font f) 设置字体。当绘制文本时,Graphics对象用参数f指定的字体。

  7. 14.4 清除 • clearRect(int x,int y,int width,int height) 用背景色填充指定矩形以达到清除该矩形的效果,也就是说当一个Graphics对象使用该方法时,相当于在使用一个“橡皮擦”。参数x、y是被清除矩形的左上角的坐标;另外两个参数是被清除矩形的宽和高。

  8. 14.5 Java 2D • Java1.2给出了一个新类Graphics2D,它是Graphics类的子类。一个Graphics2D对象把直线、圆等作为一个对象来绘制,也就是说,如果想用一个Graphics2D类型的“画笔”来画一个圆的话,就必须先创建一个圆的对象。我们仍需使用paint(Graphics g)方法来绘制,只需将Graphics对象强制转化为Graphics2D对象即可。

  9. 1.直线 • 使用java.awt.geom包中的Line2D的子类Line2D.Double创建一个直线对象。如: • Line2D line=new Line2D.Double(12,20,100, 90); • 创建一条(12,20)到(100,90)直线对象。 • 2.矩形 • 使用java.awt.geom包中的Rectangle2D. Double类来创建一个矩形对象,如: • Rectangle2D rect=new Rectangle2D. Double (50,50,300,50.897); • 上述语句创建了一个左上角坐标是(50,50),宽是300,高是50.987的一个矩形对象。

  10. 3.圆角矩形 • 使用java.awt.geom包中的RoundRectangle2D. Double类来创建一个圆角矩形对象: • RoundRectangle2D rect_round=new RoundRectangle2D. Double (50,50,300,50,8,5); • 上述语句创建了一个左上角坐标是(50,50),宽是300,高是50,圆角的长轴和短轴分别为8和5的圆角矩形对象。 • 4.椭圆 • 使用java.awt.geom包中的Ellipse2D. Double类来创建一个椭圆对象: • Ellipse2D ellipse=new Ellipse2D. Double (50,30,300,50); • 上述语句创建了一个外接矩形的左上角坐标是(50,30),宽是300,高是50的椭圆对象。

  11. 5.绘制圆弧 • 使用java.awt.geom包中的Arc2D. Double类创建一个圆弧对象: • Arc2D ellipse=new Arc2D. Double (50,30,300,50,0,100,Arc.PIE); • 上述语句创建了一个外接矩形的左上角坐标是(50,30),宽是300,高是50的起始角是0度终止角是100度的饼弧对象。其中,最后一个参数取值:Arc2D.OPEN、Arc2D.CHORD、Arc2D.PIE决定弧是开弧、弓弧和饼弧。

  12. 6.绘制二次曲线和三次曲线 • 二次曲线可用二阶多项式 • y(x)=ax2+bx+c • 来表示。一条二次曲线需要三个点来确定。使用java.awt.geom包中的QuadCurve2D.Double类来创建一个二次曲线: • QuadCurve2D curve=new QuadCurve2D.Double (50,30,10,10,50,100); • 上述代码片段使用端点(50,30)和(50,100)及控制点(10,10)创建了一条二次曲线。

  13. 7.旋转图形 • 我们有时需要平移、缩放或旋转一个图形,我们可以使用AffineTransform类来实现对图形的这些操作。 (1)首先使用AffineTransform类创建一个对象: AffineTransform trans=new AffineTransform(); 对象trans具有最常用的三个方法来实现对图形变换操作: translate(double a,double b)将图形在x轴方向移动a 个单位 像素,y轴方向移动b个像素单位。a是正值时向右移动,负值是向左移动;b是正值时是向下移动,负值向上移动。 scale(double a,double b)将图形在x轴方向缩放a倍,y轴方向缩放b倍。 rotate(double number,double x,double y)将图形沿顺时针或逆时针以(x,y)为轴点旋转number个弧度。 (2)进行需要的变换,比如要把一个矩形绕点(100,100)顺时针旋转60度,那么就要先作好准备: trans.rotate(60.0*3.1415927/180,100,100); (3)把Graphics对象,比如g_2d设置为具有trans这种功能的“画笔”: g_2d.setTransform(trans); 假如rect是一个矩形对象,那么g_2d.draw(rect)画的就是旋转后的矩形

  14. 14.6 图形的布尔运算 • 假设T1、T2是两个图形,那么 • T1和T2的布尔“与”(AND)运算的结果是两个图形的重叠部分。 • T1和T2的布尔“或”(OR)运算的结果是两个图形的合并。 • T1和T2的布尔“差”(NOT)运算的结果是T1去掉T1和T2的重叠部分。 • T1和T2的布尔“异或”(XOR)运算的结果是两个图形的非重叠部分。

  15. 14.7 绘制钟表 • 钟表可以显示当前本机的时间。在这里我们要用到一个数学公式,如果一个圆的圆心是(0,0),那么对于给定圆上的一点(x,y),该点按顺时针旋转α弧度后的的坐标(m,n)由下列公式计算: m=x×cos(α)- y×sin(α) n=y×cos(α)+x×sin(α)

  16. 14.8 绘制图像 • Toolkit类是一个抽象类,不能用构造方法直接创建这样对象,但Java运行环境提供了一个Toolkit对象,任何一个组件调用getToolkit()方法可以返回这个对象的引用。Tollkit类有一个获取图像的方法getImage(String s)。 • Graphics 类提供的方法: drawImage(Image img,int x,int y,ImageObserver observer):  绘制的Image对象;x、y是要绘制指定图像的矩形的左上角所处的位置,observer是加载图像时的图像观察器。

  17. 14.9 制作JPG图像 制作JPG图像步骤如下: • 用java.awt.image包中的BufferedImage类(Image的子类)建立一个BufferedImage对象。 • BufferedImage对象调用createGraphics()获得一个Graphics2D对象。 • Graphics2D对象调用相应的方法在BufferedImage对象中绘制图形或图像。 • JPEGCodec类调用createJPEGEncoder(OutPutStream out) 返回一个JPEGImageEncoder对象。 • JPEGImageEncoder对象调用encode(Image image)方法将BufferedImage对象写入到输出流。

More Related