Chapter6Java图形与图像处理.ppt

上传人:sccc 文档编号:5380030 上传时间:2023-07-01 格式:PPT 页数:42 大小:1.35MB
返回 下载 相关 举报
Chapter6Java图形与图像处理.ppt_第1页
第1页 / 共42页
Chapter6Java图形与图像处理.ppt_第2页
第2页 / 共42页
Chapter6Java图形与图像处理.ppt_第3页
第3页 / 共42页
Chapter6Java图形与图像处理.ppt_第4页
第4页 / 共42页
Chapter6Java图形与图像处理.ppt_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《Chapter6Java图形与图像处理.ppt》由会员分享,可在线阅读,更多相关《Chapter6Java图形与图像处理.ppt(42页珍藏版)》请在三一办公上搜索。

1、Java语言程序设计,清华大学出版社,第6章 java图形与图像处理,本章内容提要,1、图形与图像描绘2、数字图像处理3、java 3D基础,6.1图形与图形的描绘,任何一个图形对象(java.awt.Component的子类)使用java.awt.Graphics类提供的绘图方法就可以画出线条、矩形、圆形等图形。该方法为:public void paint(Graphics g);,6.1.1 Graphics类,【例6-1】绘制直线、矩形和圆的简单图形。,图6.1 组件的坐标系统,Graphics类常用的绘图方法,Graphics类的Set/get方法,【例6-2】绘制用色彩填充的笑脸图形

2、。用到的方法:fillOval(int x,int y,int width,int height)fillArc(int x,int y,int width,int height,int startAngle,int arcAngle);,6.1.2 Java 2D,Graphics类还有一些不足,例如缺少改变线条粗细的方法,也缺少填充一个对象的方法。Graphics 2D可以解决这些问题。绘制时,只要将Graphics 对象强制转化为Graphics2D对象就行。,1.控制线条粗细,首先使用Line2D类(import java.awt.geom.*;)创建直线段对象Line2D line=

3、new Line2D.Double(50,50,120,50);然后可以使用BasicStroke类(import java.awt.*;)创建一个供画笔paint()方法选择线条粗细的对象BasicStroke类的常见构造方法public BasicStroke(float width,int cap,int join);参数width:线条粗细cap:线条两端形状,可取值为:CAP_BUTT、CAP_ROUND、CAP_SQUAREjoin:线条相遇时角的处理,可取值为:JOIN_ROUND、JOIN_BEVEL、JOIN_MITER,1.控制线条粗细,Graphics2D对象通过调用se

4、tStroke(BasicStroke bs)方法来设置线条形状,并用draw()方法绘制线条。BasicStroke类为Stroke类的派生类例6-3 设置线条粗细,2.填充图形,Graphics2D对象通过调用fill()方法用颜色填充图形。Graphics2D对象还可以通过GradientPaint类(import java.awt.*;)对象,实现用渐变颜色填充图形。GradientPaint类的构造方法 GradientPaint(float x1,float y1,Color color1,float x2,float y2,Color color2,boolean cyclic)

5、;参数x1,y1 起点坐标 color1 起点颜色x2,y2 终点坐标 color2 终点颜色cyclic 两点之间的颜色渐变模式是否重复循环例 6.4 用颜色填充图形,6.1.3 画布Canvas,画布Canvas类是一个用来绘制图形的矩形组件,在画布中可以象在Applet中那样绘制各种图形,也可以响应鼠标和键盘事件。,1、创建,Canvas的构造方法没参数,所以使用简单的语句就可以创建一个画布对象Canvas canvas1=new Canvas();在创建了 Canvas对象后,一定要调用setSize()方法确定这个画布的大小。Canvas具有自己的坐标系统,使用布局管理器可以确定它在

6、其他组件中的位置,并且可以用布局管理器来进行版面布局。,2、常用方法,Canvas类是Component类的子类,它继承了组件类的paint(Graphics g),update(Graphics g),repaint()方法。当Canvas对象需要更新时,会自动调用repaint()方法。在进行程序设计时,经常把要实现的功能单独设计为一个类,而把显示这个功能设计成另一个类,一般把实现功能的类称为业务逻辑层,而显示功能的类称为表现层。这样,把逻辑层和表现层分开,有利于实现代码重用。【例6-5】通过一个窗体的文本框输入圆的半径及坐标位置,在画布上绘制一个圆。以此例说明,逻辑层和表现层间的数据传递

7、。,(b)在画布上绘制圆形图6.6 逻辑层与表现层的设计模式示例,(a)逻辑层和表现层间的数据传递,6.1.4 字体类Font,字体依赖于操作系统平台。Java提供了多种方式去获得操作系统提供的字体。字体分为物理字体、依赖系统的字体、逻辑字体和平台独立的字体。,Font类的常用构造方法Font(String name,int style,int size);参数name:逻辑字体名style:Font.PLAIN,Font.BOLD和Font.ITALIC之一或组合size:字体大小Graphics对象可以调用setFont(Font f)方法设置字体。例6-7 使用逻辑字体去输出文本例题用到

8、的方法drawString(String str,int x,int y);,6.2 数字图像处理,数字图像处理技术就是将图像信号转换成数字格式并利用计算机进行处理的过程。本节要用到awt的Image类和java.awt.image包,awt的抽象类Image是所有图形图像类的父类,java.awt.image包为创建和修改图像提供了技术支持。,6.2.1 图像文件,黑白图像二值图像:黑色区域 白色区域可以用一个比特表示像素黑色 1白色 0 或者相反灰度图像:黑色、白色,用1一个字节表示像素 256级别黑色 0白色 255颜色越接近0 越黑 颜色越接近255越白,6.2.1 图像文件,例:(1

9、)单一灰色(2)渐变灰度。,6.2.1 图像文件,彩色图像常见的彩色图像模式有RGB模式,CMKY模式和HIS模式。RGB模式R-红色,G-绿色,B 蓝色彩色图像的每个像素都是由R、G、B 3个样本值组成的一组数据表示。,6.2.1 图像文件,BMP图像文件格式微软为Windows OS设置的标准图像格式。BMP文件可描述32位真彩色的图像。Java的Image等类不直接支持BMP文件的读取。GIF图像文件格式存储最大256色的彩色图像或灰度图像JPEG图像文件格式用于数字化图像的标准编码Image类的getImage()方法把GIF格式和JPEG格式的图像文件和Image对象联系起来。,6.

10、2.2 图像的基本操作,图像最基本的操作有三种,它们是创建图像、加载图像和显示图像。1、创建图像对象 由于图像最终要在屏幕中显示出来,java.awt的Component类提供了一个createImage()方法来生成Image图像对象。CreateImage()方法有两种形式:Image createImage(ImageProducer imgProd);Image createImage(int width,int height);,2、加载图像 获得图像的另一种方法是加载图像。这通过使用由Applet类定义的getImage()方法来实现。它有以下形式:Image getImage(U

11、RL url)将url路径下的图像加载到Image类对象Image getImage(URL url,String imageName)将url路径下的图像加载到以imageName命名的Image类对象,3、显示图像 显示图像可以用drawImage()方法,drawImage()是Graphics类的方法。它有好几种形式,我们将要用到下面的一种:boolean drawImage(Image imgObj,int left,int top,ImageObserver imgOb);参数imgObj:Image对象left,top:图像的左上角坐标imgOb:实现了ImageObserver

12、接口的类的引用,【例6-8】用getImage()方法和drawImage()方法加载和显示图像。,6.2.3 双 缓 冲(选讲),由于加载图像需要时间,这时我们就会感觉屏幕在不断闪烁。为了解决这个问题,在内存或显存中开辟一块缓冲区,把加载的图像放到缓冲区中。当图像加载完毕,我们再把图像从缓冲区中调到屏幕上让它显示,由于从缓冲区读取数据的速度很快就不会出现闪烁了。这就称为双缓冲。,【例6-9】演示双缓冲技术的效果。,我们创建了一个Image对象,然后在这个Image对象上(而不是在屏幕上)画图。画图需要用一个Graphics对象。这个Graphics对象可以通过getGraphics()方法来

13、获得。下面构造一个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(蓝)四个分量表示的整数,记作0 xA

14、ARRGGBB。其中A、R、G、B的取值从0f(十六进制)。红色:0 xffff0000 绿色:0 xff00ff00 蓝色:0 xff0000ff 白色:0 xffffffff 黑色:0 xff000000 图像的像素点其排列如图6.14所示,我们按从左往右、从上往下的顺序取出像素点,构成一整型数组。,图6.14像素数组元素的排列,2、MediaTracker类,MediaTracker类用于加载多媒体图像,使用时,先生成一个MediaTracker对象,再用它的addImage()方法来加载图像。addImage()方法有以下一般形式:void addImage(Image imgObj,

15、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类

16、,PixelGrabber类的作用是从现有的图像中提取像素数据构造一个像素数组。在使用PixelGrabber时,首先需要生成一个足够大的int型的数组来存储像素数据,然后生成一个PixelGrabber实例对象,将提取到的图像数据存入到一个矩形区域中。最后,这个实例对象中调用grabPixels()方法将数据值放进像素数组中。,【例6-11】将图像进行反相处理示例。,6.3.1 Java 3D概述(选讲),Java 3D的安装和运行:到其官方网站:http:/3D安装完毕后,在JDK目录下的jrelibext子目录下,应有四个.jar文件:j3daudio.jar、j3dcore.jar、j

17、3dutils.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的坐标系统是右旋的三维坐标体系

18、(3)场景为了支持大型虚拟空间,Java3D提出了“场景Locale”的概念。一个场景和与它结合的坐标系一起组成了在虚拟空间之下的一个表现层。虚拟空间可以包含一个或多个场景。而所有其他的对象都附加在一个场景之中。,3、Java 3D设计方法,构造一个Java 3D应用程序,必须首先创建一个虚拟空间对象并且至少把一个Locale场景对象附加之上。然后,构建出需要的场景图像,它由一个分支组结点开始并且包括至少一个观察平台对象,而场景图就是附加于这个观察平台。当一个包含场景图的观察对象被附加于一个虚拟空间,Java3D的渲染循环就开始工作。这样,场景就会和它的观察对象一起被绘制在画布(Canvas 3D)上。,【例6-12】最简单的Java 3D程序。,总结,本章的内容比较多,请教师根据教学时数的情况,选讲部分内容。,

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

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号