




已阅读5页,还剩33页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java语言程序设计,清华大学出版社,第6章 java图形与图像处理,本章内容提要,6.1 图形与图形的描绘,任何一个图形对象(java.awt.Component的子类)使用java.awt.Grephics类提供的绘图方法就可以画出线条、矩形、圆形等图形。该方法为: public void paint(Graohics g);,6.1.1 Graphics类,【例6-1】 绘制直线、矩形和圆的简单图形。,图6.1 组件的坐标系统,Graphics类常用的绘图方法,图像的加载和显示是异步进行的,图像的生产者(ImageProducer)传递给图像的消费者(ImageConsumer)一个与图像相关的位,因为图像的生产过程是一个异步行为,所以 AWT 也提供一个图像观察(ImageObserver),用来监视图像生产者的图像生产过程。 因为 java.awt.Component 实现 ImageObserver 接口,所以 AWT 中每个构件都是ImageObserver ,当一个给定的 ImageProducer 采取异步操作时,这个 ImageObserver 可以选择是否被更新,Graphics类的Set/get方法,【例6-2】 绘制用色彩填充的笑脸图形。,6.1.2 Java 2D,绘制时,只要将Graphics 对象强制转化为Graphics 2D对象就行。,graphics类还有一些不足,例如缺少改变线条粗细的方法,也缺少填充一个对象的方法。Graphics 2D可以解决这些问题。,【例6-3】设置线条粗细,线段端点修饰风格简介 常 量 名 称常 量 值修 饰 办 法 BasicStroke.CAP_BUTT0对线段端点不加任何修饰 BasicStroke.CAP_ROUND1在线段端点加半圆进行修饰,半圆的直径为线段的宽度 BasicStroke.CAP_SQUARE2在线段端点加矩形进行修饰,矩形的宽度为线段宽度的一半,矩形的高度为线段的宽度,线段折点修饰风格简介 常 量 名 称常 量 值修 饰 办 法 BasicStroke.JOIN_MITER0对线段折点不加任何修饰 BasicStroke.JOIN_ROUND1在折线段的两端加半圆进行修饰,半圆的直径为线段的宽度 BasicStroke.JOIN_BEVEL2将组成折点的两条线段的外侧延长至相交,然后填充被包的区域,【例6-4】填充图形,GradientPaint类 构造函数GradientPaint(float x1, float y1, Color color1, float x2, float y2, Color color2,boolean cyclic) 即从点(x1,y1)到点(x2,y2)进行渐变 Cyclic为true时,为循环模式。,6.1.3 画布Canvas,画布Canvas类是一个用来绘制图形的矩形组件,在画布中可以象在Applet中那样绘制各种图形,也可以响应鼠标和键盘事件。,1、创建,Canvas的构造方法没参数,所以使用简单的语句就可以创建一个画布对象: Canvas canvas1=new Canvas(); 在创建了 Canvas对象后,一定要调用setSize()方法确定这个画布的大小。 Canvas具有自己的坐标系统,使用布局管理器可以确定它在其他组件中的位置,并且可以用布局管理器来进行版面布局。,2、常用方法,我们在进行程序设计时,经常把要实现的功能单独设计为一个类,而把显示这个功能设计成另一个,我们把实现功能的类称为业务逻辑层,而显示功能的类称为表现层。这样,把逻辑层和表现层分开,有利于实现代码重用。看下面的示例。 【例6-5】通过一个窗体的文本框输入圆的半径及坐标位置,在画布上绘制一个圆。以此例说明,逻辑层和表现层间的数据传递。,(b) 在画布上绘制圆形 图6.6 逻辑层与表现层的设计模式示例,(a) 逻辑层和表现层间的数据传递,6.2 数字图像处理,数字图像处理技术就是将图像信号转换成数字格式并利用计算机进行处理的过程。 我们要用到awt的Image类和java.awt.image包,awt的抽象类Image所有图形图像类的父类,java.awt.image包为创建和修改图像提供了技术支持。,6.2.1 图像文件,例:(1) 单一灰色 (2)渐变灰度。,6.2.2 图像的基本操作,图像最基本的操作有三种,它们是创建图像、加载图像和显示图像。 1、 创建图像对象 由于图像最终要在屏幕中显示出来,java.awt的Component类提供了一个createImage()方法来生成Image图像对象。 CreateImage()方法有两种形式: Image createImage(ImageProducer imgProd) ; Image createImage(int width, int height) ;,2、 加载图像 获得图像的另一种方法是加载图像。这通过使用由Applet类定义的getImage()方法来实现。它有以下形式: Image getImage(URL url) Image getImage(URL url, String imageName),3、显示图像 显示图像可以用drawImage()方法,drawImage()是Graphics类的方法。它有好几种形式,我们将要用到下面的一种: boolean drawImage(Image imgObj, int left, int top, ImageObserver imgOb) ;,【例6-8】用getImage()方法和drawImage()方法加载和显示图像。,6.2.3 双 缓 冲,由于加载图像需要时间,这时我们就会感觉屏幕在不断闪烁。 为了解决这个问题,在内存或显存中开辟一块缓冲区,把加载的图像放到缓冲区中。当图像加载完毕,我们再把图像从缓冲区中调到屏幕上让它显示,由于从缓冲区读取数据的速度很快就不会出现闪烁了。这就称为双缓冲。,【例6-9】演示双缓冲技术的效果。,我们创建了一个Image对象,然后在这个Image对象上(而不是在屏幕上)画图。画图需要用一个Graphics对象。这个Graphics对象可以通过getGraphics()方法来获得。下面构造一个Graphics对象gc,并用红色填充图像。 Canvas c = new Canvas(); Image test = c.createImage(200, 100); Graphics gc = test.getGraphics(); gc.setColor(Color.red); gc.fillRect(0, 0, 200, 100); 这个图像是不可见的,仅仅存在于内存中。为了真正显示这个图像,需调用drawImage()方法。,6.2.4 图像处理技术,1、像素点数组的构成,像素点是一个具有Alpha(透明度)、Red(红)、Green(绿)和Blue(蓝)四个分量表示的整数,记作0xAARRGGBB。其中A、R、G、B的取值从0f(十六进制)。 红色: 0xffff0000 绿色: 0xff00ff00 蓝色: 0xff0000ff 白色: 0xffffffff 黑色: 0xff000000 图像的像素点其排列如图6.14所示,我们按从左往右、从上往下的顺序取出像素点,构成一整型数组。,图6.14 像素数组元素的排列,2、 MediaTracker类,MediaTracker类用于加载多媒体图像,使用时,先生成一个MediaTracker对象,再用它的addImage()方法来加载图像。addImage()方法有以下一般形式: void addImage(Image imgObj, int imgID) void addImage(Image imgObj, int imgID, int width, int height),3、ImageProducer接口和MemoryImageSource 类,ImagePruducer是一个用于生成图像数据对象的接口。实现该接口的对象要用整数型数组或字节型数组生成Image对象。 MemoryImageSource是用于生成新的图像的类。它的构造函数如下: MemoryImageSource(int width, int height, int pixel , int offset, int scanLineWidth),4、PixelGrabber类,PixelGrabber类的作用是从现有的图像中提取像素数据构造一个像素数组。 在使用PixelGrabber时,首先需要生成一个足够大的int型的数组来存储像素数据,然后生成一个PixelGrabber实例对象,将提取到的图像数据存入到一个矩形区域中。最后,这个实例对象中调用grabPixels()方法将数据值放进像素数组中。,【例6-11】将图像进行反相处理示例。,6.3.1 Java 3D概述,Java 3D的安装和运行 : 到其官方网站: /products/java-media/3D/ 下载最新的系统安装程序。 Java 3D安装完毕后,在JDK目录下的jrelibext子目录下,应有四个.jar文件:j3daudio.jar、j3dcore.jar、j3dutils.jar、vecmath.jar,在JDK目录下的jrebin子目录下,应有J3D.dll、j3daudio.dll、J3DUtils.dll文件。另外,在demo目录下的java3d中有系统提供的示例程序。,6.3.2 Java 3D程序设计,1、Java 3D的基本体系结构,2、几个基本概念,(1)虚拟空间 在Java3D中,虚拟空间被定义为结合一系列对象的三维空间。虚拟空间被用作最大的聚集体表现单位,同时也可被看作一个数据库。 对于一个Java3D应用程序,必须定义一个虚拟空间才可以在“空间”中显示三维图像。,(2)坐标系统 默认情况下,Java3D的坐标系统是右旋的三维坐标体系 (3)场景 为了支持大型虚拟空间,Java3D提出了“场景Locale”的概念。一个场景和与它结合的坐标系一起组成了在虚拟空间之下的一个表现层。虚拟空间可以包含一个或多个场景。而所有其他的对象都附加在一个场景之中。,3、Java 3D设计方法,构造一个Java 3D应
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030中国慢性肾脏病(CKD)行业市场发展趋势与前景展望战略研究报告
- 2025-2030中国座舱模块行业市场发展趋势与前景展望战略研究报告
- 2025-2030中国帆船靴行业市场发展趋势与前景展望战略研究报告
- 2025-2030中国工程设计行业市场发展现状及发展趋势与投资前景研究报告
- 2025-2030中国宠物食品包装行业发展分析及投资风险与战略研究报告
- 基于数据的市场推广策略与商业地产运营-洞察阐释
- 历史档案的大数据分析与可视化-洞察阐释
- 医疗伦理与患者隐私保护在心脏康复中的实践与应用
- 基于区块链的企业知识管理系统创新-洞察阐释
- 医疗信息共享中的区块链技术安全探讨
- 农艺师考试试题及答案(种植业卷)
- DB4409-T 38-2023 奇楠沉香栽培技术规程
- 四年级上册语文园地七教学反思
- 光伏工程光伏场区箱式变压器安装方案
- 七台河市城区段倭肯河治理工程环境影响报告书
- 中国共产主义青年团团员发展过程纪实簿
- 学校食堂病媒生物防治管理制度范本(通用8篇)
- 硕士研究生专业研究方向证明(模板)
- 戥秤使用技术
- 地域的永恒魅力
- 测风工风险告知和安全操作卡
评论
0/150
提交评论