计算机图形学实验报告6
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《计算机图形学》实验6实验报告
实验题目:简单Java绘图板程序
实验内容:1 阅读理解本试验提供的参考资料。
2编写并调通一个简单绘图板的java程序。
参考资料:1pb.java
2 Java图形处理介绍.doc
基本概念:
1在编写显示图形的JAVA程序中,需要经常覆盖一些方法,其中使用的最多的就是paint()、repaint()和update()方法。
○1Paint() :每次applet被其他窗口覆盖后重新显示时,都会调用paint()方法,在paint()方法中会调用repaint()方法;
○2Repaint(): repaint()方法强制Applet进行重新绘制。调用repaint()方法之后会接着调用update()方法。Repaint()方法有三种调用方式:
●public void repaint(long tm)
功能:每隔tm毫秒进行重绘;
●public void repaint(int x,int y,int width,int height)
功能:重绘由参数指定的矩形区域;
●public void repaint(long tm,int x,int y,int width,int height)
功能:每隔tm毫秒对指定矩形区域进行重绘;
○3Update() :update()方法默认的行为是先使用背景色填充applet,然后再调用paint() 方法2 颜色模型
绘制图形的过程就是布置布置颜色的过程,为了将二进制数字变成屏幕颜色,需要采用一些规则,Java把这个规则包装在颜色模型中。
○1Java的32位颜色模型
Java将颜色表示为32位。在缺省情况下,用于表示图形的32位数中8位用于alpha,8位用于红,8位用于绿,8位用于蓝。这些值恰好放进一个32位的int数中。
○2ColorModel类(在java.awt.image包中)有两个子类,包装了两大颜色模型:
●DirectColorModel支持将32位整型数分配成用不同位数和位的位置用以表示alpha、红、
绿、蓝。
●IndexColorModel支持查找表。颜色表示成字节,用于对表索引。真实颜色值是表中的
整型数,用缺省颜色模型进行翻译。
○3直接颜色模型(DirectColorModel)
直接颜色模型在程序中指定整型数中的多少位和哪些位分别用于表示alpaha、红、绿、蓝四个属性。在这里必须注意的是,在直接颜色模型中,每一个属性的位必须连接,且不能与另一个属性的位重叠。
DirectColorModel类有两个构造器,都要求用一个整数指定模型的位宽(当前模型用32位,旧式颜色模型用8位)。每种颜色(红、绿、蓝)用一个整数,也可以用第五个整数指定alpha。
●DirectColorModel(int nbits,int redmask,int greenmask,int,bluemask)
●DirectColorModel(int nbits,int redmask,int greenmask,int bluemask,int alphamask)
掩膜就是将整数中对应颜色所在位进行设置的整数。例如,用1位表示红色、3位表示绿色、20位表示蓝色的颜色模型构造如下:
model=new DirectColorModel(32,0x800000,0x700000,0x0fffff);
○4索引颜色模型(IndexColorModel)
ColorModel类的另一个颜色模型是索引颜色模型IndexColorModel。索引颜色模型把颜色值
看成红、绿、蓝数值查找表中的索引,在Java中索引是个字节。实际要查找3个表,各对应一个主颜色(另外,你还可以用第4个表查找ALPHA)。每个表项包含8位,用于指定颜色强度。对于使用较少颜色的图形,索引颜色模型通过了方便的映射机制,这个机制特别适用于图形要构造成数字信息时。索引颜色模型也可以用于绘制不规则形状。IndexColorModel类的构造器有很多过载,最简单的形式是:
IndexColorModel(int nBits,int nColors,byte reds[],byte greens[],byte blues[])
索引颜色模型的主要好处是包装了查找过程,另一个附带效果是只用8位而不是32位表示图素。这就节省了75%,这在程序使用几个大图形时效果会很明显。还有一个好处是加强了图形过滤性能。
3图象的装入
○1在Java中Image是一个抽象类,是无法构造的。创建图形时,使用Component类中的CreateImage方法,这种方法通常只是让它的同级件建立图形。在特定平台上对本地方法的一组调用成为同级件。使用CreateImage()主要是对本地方法的调用,通过这种调用,返回的对象是Image的特定平台子类。
○2图形也可以通过Component类的getImage方法从远程文件装入。远程装载最简单的办法是直接使用getImage连接拥有远程图形文件的机器,装入文件、分析文件、构造并返回图形。在实际中,Java对远程图形文件都执行下列策略:所有远程图形都使用异步线程装入。图形需要使用或“观察”(Observe)时才开始装入线程。这是因为直接装载会引起很大的延迟。
4 imageUpdate的标志值
标志
含义
●ImageObserver.WIDTH
图形宽度已经修改,可以从width参数读或用图形的getwidth()方法读取
●ImageObserver.HEIGHT
图形高度已经修改,可以从height参数读或用图形的getHeight()方法读取
●ImageObserver.PROPERTIES
图形属性已经修改,可以用图形的Getproperties()方法读取
●ImageObserver.SOMEBITS
图形的多个图素已经传送
●ImageObserver.FRAMEBITS
多帧图形的一个帧已经传送
●ImageObserver.ALLBITS
整个图形已经完毕
●ImageObserver.ERROR
生成中出现了错误
●ImageObserver.ABORT
生成异常终止
5内存图象源(MemoryImageSource)
在Java中另一种图形源是内存:你可以在程序中建立整形或字节数组来表示图素值,并利用Java的MemoryImageSource类构造Image的实例。
○1MemoryImageSource的构造器调用如下:
MemoryImageSource(int width, int height, int[] pixels, int arrayOffset, int scanwidth)
○2MemoryImageSource有各种表示颜色的选项。