




已阅读5页,还剩33页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第11章Java绘图与动画,第1页,本章概述本章的学习目标主要内容,本章概述,图形图像与动画等多媒体技术是当今计算机信息领域的热门话题,而且已经成为计算机中最大的应用领域。有了图形图像和动画,应用程序才变得丰富多彩,栩栩如生。传统的Java绘图与动画主要由AWT的Graphics和Graphics2D类来实现的,新的GUI框架JavaFX也对绘图和动画提供了强大的支持。本章将分别介绍传统的Java绘图与动画技术,以及JavaFX中的绘图与动画效果的应用。,第2页,本章的学习目标,掌握Graphics类提供的绘制图形的方法了解Java2D绘图掌握传统的Java多线程实现的动画技术了解消除动画中的闪烁的方法掌握JavaFX的直接在画布上绘图的方法了解JavaFX的动画效果,第3页,第4页,主要内容,11.1传统的Java绘图11.2显示图像与动画11.3JavaFX绘图与动画11.4本章小结11.5思考和练习,11.1传统的Java绘图,Java的图形都是相对于窗口绘制的,可以是applet的主窗口或子窗口,也可以是独立应用程序窗口(基于Swing的窗口也支持这些方法)。传统的Java绘图是使用AWT包中的Graphics类和Graphics2D类提供的绘图方法来绘制简单的图形。,第5页,图形直角坐标系统,使用Java绘制图形时,采用以象素为单位的直角坐标系统,这是一种对屏幕上每个点进行定位的方案,默认情况下,该坐标系统的圆点位于屏幕的左上角,向左延伸出X轴的正方向,向下延伸出Y的正方向,这和其他的编程语言是相同的。所有的图形向窗口的输出都是通过图形上下文进行的。图形上下文是由Graphics类封装的,可以通过两种方式获得图形上下文:作为参数通过方法传递,例如方法paint()或update()。通过Component的getGraphics()方法返回。,第6页,Graphics类,Graphics类是抽象类,它定义了大量方法,用于绘制各种类型的对象,例如直线、矩形和弧线。有的个方法只绘制对象的边框,有的方法则绘制填充的对象。对象以当前选择的图形颜色进行绘制和填充,默认是黑色。当对图形对象的绘制超出窗口的范围时,会自动剪裁输出。,第7页,Java2D图形,Graphics类提供的方法只能绘制宽度为1个象素的图形。如果需要绘制宽度大于1个像素的图形,则需要使用Graphics2D。这是从JDK1.2版本开始增加的类,它扩展了Graphics类。Graphics2D在几个地方增强了Graphics提供的基本功能。为了使用这种扩展的功能,需要将使用paint()等方法获得的图形上下文强制转换成Graphics2D。Graphics2D提供了以下方法来设置绘图环境的属性。voidsetBackground(Colorcolor):设置绘图环境的背景颜色;voidsetPaint(Paintpaint):设置绘图环境的绘图颜色;voidsetStroke(Strokes):设置绘图环境画笔的样式。,第8页,Font类,Font类,即字体类,可以使用它来控制文本的字体及其样式。Font类提供了将字符序列映射到字形序列所需要的信息,以便在Graphics对象和Component对象上呈现字形序列。Font类的构造方法如下:Font(Fontfont);Font(Stringfontname,intstyle,intsize);其中,fontname为字体名称,是字体集合中的某个字符串,该字符串是某种字体的名称;style为字体风格,是Font类定义的静态常量,包括Font.PLAIN(下划线),Font.BOLD(粗体)和Font.ITALIC(斜体)等,可以是多个值的组合风格,如,Font.BOLD|Font.ITALIC可以指定加粗、斜体样式;size为字体的大小。,第9页,Color类,Color类用于封装默认sRGB(standardRedGreenBlue)颜色空间中的颜色,或者用于封装由ColorSpace标识的任意颜色空间中的颜色。每种颜色都有一个隐式的alpha值1.0,或者有一个在构造方法中指定的alpha值。alpha值定义了颜色的透明度,可用一个范围在0.01.0或0255内的浮点数来表示它。alpha值为1.0或255则意味着颜色完全不透明,alpha值为0或0.0则意味着颜色完全透明。Color类定义了一些静态颜色常量,如YELLOW和yellow都表示黄色,BLUE和blue表示蓝色等。,第10页,绘制简单图形,第11页,Java2D绘图,使用Graphics2D可以绘制更丰富的Java2D图形。在绘制图形之前,通常需要使用setStroke()方法设置绘图环境的画笔样式,通过setPaint()方法设置绘图颜色。通常使用BasicStroke类来指定画笔的宽度。BasicStroke类实现了Stroke接口,该类用来定义直线的宽度、连接的样式、直线末端的样式以及虚线的样式。,第12页,Java2D绘图,Java2D可以通过setPaint()方法来设置绘图颜色,本书介绍两个比较常用的:GradientPaint和TexturePaint。GradientPaint用来定义线性渐变颜色TexturePaint类用来定义填充的材质(texture),该类的构造方法如下:TexturePaint(BufferedImagetexture,Rectangle2Drect)其中,texture参数是一个BufferedImage对象,用来定义一个单位材质;rect参数用来复制材质。,第13页,Java2D绘图,第14页,XOR绘图模式,绘图模式指的是画笔的着色方式。默认的绘图模式为覆盖,即后绘制的图形将覆盖先前绘制的图形。Graphics类还提供了一种异或绘图模式,即XOR模式。用户可以通过setXORMode()方法来将当前的绘图模式设置为异或模式。从XOR模式返回到覆盖模式的方法是调用setPaintMode()方法。XOR模式的优点是:新对象总是保证可见,而不管在它上面绘制的颜色是什么。,第15页,XOR绘图模式,第16页,显示文本,除了绘制图形以外,Graphics类还提供了显示文本的方法drawString,在调用该方法显示文本时,还可以先设置文本的颜色和字体。,第17页,第18页,主要内容,11.1传统的Java绘图11.2显示图像与动画11.3JavaFX绘图与动画11.4本章小结11.5思考和练习,11.2显示图像与动画,图像是由专门的软件和截取图像的工具生成的二进制文件,按照不同存储图像数据形成了不同的图形种类,主要包括bmp、gif、jpeg等几种,本节将介绍Java如何处理这些现有的图像资源。虽然Graphics类提供了大量的绘图方法,但是,如果用它们来绘制比较复杂的图形,还是比较困难,所以对于复杂的图像,还是通过其他图像处理软件处理好之后,然后通过Graphics类的drawImage()方法将它加载并显示出来。,第19页,创建图像,图像的创建有多种方法,最简单的是从文件获取,通常使用ImageIO类的read方法来读取。该方法返回的是BufferedImage对象,BufferedImage是Image的子类,它描述了具有可访问图像数据缓冲区的Image。如果没有图像文件,还可以通过程序来生成一个图像,这就需要用到ImageProducer接口。该接口的定义在java.awt.image包中,该包中的FilterImageSource和MemoryImageSource类都实现了ImageProducer接口。MemoryImageSource类用来在内存中生成图像,该类的构造方法如下:MemoryImageSource(intw,inth,intpixel,intoffset,intscan)FilteredImageSource类基于已经载入的图像和图像过滤器来生成一张图片,该类的构造方法如下:publicFilteredImageSource(ImageProducerorigObj,ImageFilterimgObj);,第20页,过滤图像,过滤器的概念类似于摄影中的滤色镜。图像过滤器ImageFilter能够在图像显示之前修改图像,java.awt.image中提供了ImageFilter及其两个子类CropImageFilter和RGBImageFilter。CropImageFilter用于提取图像中指定矩形区域的图像,而RGBImageFilter用于对图像的色彩进行处理。本书案例用到了CropImageFilter过滤器,CropImageFilter的构造方法如下:publicCropImageFilter(intx,inty,intwidth,intheight);其中(x,y)为剪裁矩形的坐标,width和height为剪裁的宽度和高度。创建完图像过滤器之后,可以通过FilteredImageSource对象来将过滤器放在已有的图像源之上。,第21页,显示图像,第22页,多线程实现动画,所谓动画就是通过连续播放一系列画面,给视觉造成连续变化的图画,这是动画最基本的原理。在Java中实现动画有很多种办法,但它们实现的基本原理是一样的,即在屏幕上画出一系列的帧,给人的视觉造成运动的感觉。要在Java中实现动画效果,首先需要用Graphics类的drawImage()方法在屏幕上绘制图片,然后通过定义一个线程,使该线程睡眠一段时间,然后再显示另外一幅图片,如此依次显示,即可在屏幕上绘制出一系列的帧来做成运动的感觉,从而达到显示动画的目的。,第23页,动画技术,在制作动画的过程中,需要注意以下两个问题:装载图像需要时间,可能导致图像一部分一部分的显示;屏幕会出现闪烁现象。闪烁的原因有两个,一是绘制每一帧花费的时间太长(因为重绘时要求的计算量大);二是在每次调用paint()方法之前,Java会用背景颜色重画整个画面,当在进行下一帧的计算时,用户看到的是背景。减弱闪烁的较好办法有两种:重载update()和使用双缓冲。,第24页,重载update()方法,在AWT组件中,当upload方法清除组件的背景时,实际是用当前的背景色重新绘制图像。重载update()方法,将以前在paint()方法中的绘图代码包含在update()中,从而避免每次重绘时将整个区域清除。所以,要消除画面闪烁就一定要重载update()方法,使该方法不会清除整个画面,而只是消除必要的部分。,第25页,使用双缓冲技术,图像双缓冲的主要原理是创建一个后台图像,将需要绘制的一帧画入图像,然后调用drawImage()方法将整个图像一次绘制到屏幕上。这种方法的好处是大部分绘制是离屏的。将离屏图像一次绘制到屏幕上比直接在屏幕上绘制要有效得多,大大提高做图的性能。双缓冲可以使动画更平滑,但也有一个缺点,那就是要分配一张后台图像,如果图像相当大,这将需要很大一块内存。当使用双缓冲技术时,应重载update()方法。、,第26页,动画案例,第27页,第28页,主要内容,11.1传统的Java绘图11.2显示图像与动画11.3JavaFX绘图与动画11.4本章小结11.5思考和练习,11.3JavaFX绘图与动画,JavaFX自动处理渲染任务,而不需要手动处理。这是JavaFX相对于Swing所做的重要改进之一。在Swing或AWT中,要想重绘窗口,必须调用repaint()方法。JavaFX删除了这种繁琐的机制,因为它会跟踪场景中显示的内容,并根据需要重新显示场景。这被称为保留模式。有了这种方法,就不需要调用repaint()这样的方法。,第29页,绘制基本图形,JavaFX的图形方法包含在java.scene.canvas包的GraphicsContext类中。这些方法可直接在画布的表面上绘制基本图形。画布由java.scene.canvas包中的Canvas类封装。在画布上绘制完图形后,JavaFX会在需要重新显示该图形的地方自动渲染。在画布上绘制基本图形的基本步骤如下:(1)首先,创建一个Canvas实例。(2)其次,必须获得一个引用该画布的GraphicsContext对象。之后就可以使用GraphicsContext在画布上绘制输出,第30页,直接在画布上绘制,Canvas类派生自Node类,因此可以用作场景图中的节点。Canvas定义了两个构造方法。一个是默认构造方法,另一个如下所示:Canvas(doublewidth,doubleheight)其中,width和height指定了画布的尺寸。为了获得引用画布的GraphicsContext,需要调用getGraphicsContext2D()方法。该方法返回画布的图形上下文。GraphicsContext定义了许多方法,可以绘制各种形状、文本和图片等,并且支持使用效果和变换。,第31页,直接在画布上绘图,除了使用GraphicsContext绘制各种图形以外,javafx.scene.shape包中还有一些用来绘制各种图形形状的类,例如Line、Rectangle、Circle等,它们都是Shape类的子类,而Shape又是Node的子类,所以这些图形都是节点,因此可以直接成为场景图的一部分。下一节在学习JavaFX动画时会用到其中几个,到时候可以体验一下另一种创建图形的方法,第32页,JavaFX动画,JavaFX中的动画可以分为时间轴动画和过渡两种。Timeline(时间轴)和Transition(过滤)都是javafx.animation.Animation的子类。1.过渡(Transitions)JavaFX中的Transition提供了在一条内部时间轴上展现动画的手段。Transition可以被组合用来创建并行或串行的多重动画。,第33页,时间轴动画,动画是由它的一些相关属性驱动的,例如大小、位置和颜色等。Timeline提供了随着时间进展更新这些属性值的能力。JavaFX支持关键帧动画(KeyFrameAnimation)。在KeyFrameAnimation中,绘图场景(GraphicalScene)的动画状态的转换是由特定时间点的Scene状态的起始和结束快照(KeyFrames,关键帧)来定义的。系统能够自动执行动画。在需要时它可以停止、暂停、恢复、反转或者重
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 民爆行业企业安全培训课件
- 初三越城考试试卷及答案
- 保险基础考试题库及答案
- 中小学学校智慧校园十四五建设规划方案
- 哪些企业适合发展新质生产力
- 民族艺术创作思路课件
- 文旅产业新质生产力发展
- 新质生产力的核心定义解读
- 民族理论第七章课件
- 区域新质生产力发展实践探索
- 2025年贵州蔬菜集团有限公司招聘笔试参考题库含答案解析
- 2025年1月浙江省高二物理学业水平考试试卷试题(含答案详解)
- 广东专插本《管理学》真题及答案(2024-2025)
- 茶马古道文化研究
- 2024年全国职业院校技能大赛高职组(环境检测与监测赛项)考试题库(含答案)
- 南京工业大学甲醇制氢工艺设计(反应器)
- 医疗废物处理可行性研究报告
- 2025年中考语文阅读复习:理解词语含义(含练习题及答案)
- 公务员2020年国考《申论》真题及答案(地市级)
- 4 少让父母为我操心 (教学设计)2024-2025学年统编版道德与法治四年级上册
- 三农村电商创业融资指导手册
评论
0/150
提交评论