ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:1.16MB ,
资源ID:9682719      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9682719.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(计算机图形学实验6实验报告.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

计算机图形学实验6实验报告.docx

1、计算机图形学实验6实验报告计算机图形学实验6实验报告实验题目: 简单Java绘图板程序实验内容:1 阅读理解本试验提供的参考资料。2编写并调通一个简单绘图板的java程序。参考资料:1 pb.java 2 Java图形处理介绍.doc基本概念:直接颜色模型(DirectColorModel):直接颜色模型在程序中指定整型数中的多少位和哪些位分别用于表示alpaha、红、绿、蓝四个属性。索引颜色模型:索引颜色模型把颜色值看成红、绿、蓝数值查找表中的索引,在Java中索引是个字节。实际要查找3个表,各对应一个主颜色(另外,你还可以用第4个表查找ALPHA)。每个表项包含8位,用于指定颜色强度。图形

2、观察者(ImageObserver):图形观察者机制是Observer设计模式的一个例子。其思路是让任意个其它对象“观察”一个对象。被观察对象产生观察者要知道的改变时,被观察对象调用所有观察者。被观察对象可以决定何时通知观察者。媒介跟踪器(MediaTracker):媒介跟踪器MediaTracker在处理动画播放程序或多幅图象时有广泛的应用。为达到图象平滑的效果,通常小程序和应用程序要在某个图形完全装入后才能工作。内存图形源(MemoryImageSource):在Java中另一种图形源是内存:可以在程序中建立整形或字节数组来表示图素值,并利用Java的MemoryImageSource类构

3、造Image的实例。过滤器(ImageFilter):AWT通过允许你在图象生成者和图象使用者之间插入图象过滤器的方式支持对图象的操作。一个图象过滤器实际上就是一个ImageFilter类,它放置在一个生产者和一个使用者之间,在使用者得到图象之前改变图象的数据。客户程序:客户程序由三个类组成:client类,network类和writer类。Client类是其主体部分,此类由Frame类扩展而来,Writer类是在network类中启动的线程。算法设计:1、绘图方法paint()public void paint(Graphics g) Graphics2D g2d = (Graphics2D

4、)g; Point p1,p2; n = paintInfo.size(); /几何图元信息 if(toolFlag=2) g.clearRect(0,0,getSize().width,getSize().height);/清除 for(int i=0; in ;i+) p1 = (Point)paintInfo.elementAt(i); p2 = (Point)paintInfo.elementAt(i+1); size = new BasicStroke(p1.boarder,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL); g2d.setCo

5、lor(p1.col); g2d.setStroke(size); 绘制图形用到类Graphics2D,其中包括很多绘制图形的方法,定义一个Graphics2D类g,用getGraphics()来得到一个Graphics2D对象,它相当于组建的绘图环境,可以进行各种绘图操作。定义一个BasicStroke类size来确定画笔的大小,其中BasicStroke类定义针对图形图元轮廓呈现属性的一个基本集合,这些图元使用Graphics2D对象呈现,而该对象的Stroke属性设置为此BasicStroke。其中con为画笔宽度,CAP_BUTT指无装饰地结束未封闭的子路径和虚线线段,JOIN_BEV

6、EL通过直线连接宽体轮廓的外角,将路径线段连接在一起。2、实现画笔、橡皮、直线,椭圆和矩形的绘制。if(p1.tool=p2.tool) switch(p1.tool) case 0:/画笔 Line2D line1 = new Line2D.Double(p1.x, p1.y, p2.x, p2.y); g2d.draw(line1); break; case 1:/橡皮 g.clearRect(p1.x, p1.y, p1.boarder, p1.boarder); break; case 3:/画直线 Line2D line2 = new Line2D.Double(p1.x, p1.y

7、, p2.x, p2.y); g2d.draw(line2); break; case 4:/画圆 Ellipse2D ellipse = new Ellipse2D.Double(p1.x, p1.y, Math.abs(p2.x-p1.x) , Math.abs(p2.y-p1.y); g2d.draw(ellipse); break; case 5:/画矩形 Rectangle2D rect = new Rectangle2D.Double(p1.x, p1.y, Math.abs(p2.x-p1.x) , Math.abs(p2.y-p1.y); g2d.draw(rect); bre

8、ak; case 6:/截断,跳过 i=i+1; break; default : /end switch /end if /end for /end绘图方法paint() 3、对画笔大小的设定,和对橡皮大小的设定。String selected = SizeChoice.getSelectedItem(); if(selected=1) con = 1; size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL); /橡皮大小 String Esize = EraserChoice.getSelectedIt

9、em(); if(Esize=5) Econ = 5*2; else if(Esize=9) Econ = 9*2; else if(Esize=13) Econ = 13*2; else if(Esize=17) Econ = 17*3; 代码: /构造方法 paintboard(String s) super(s); addMouseMotionListener(this); addMouseListener(this); paintInfo = new Vector(); /几何图元信息 /*各工具按钮及选择项*/ /颜色选择 ColChoice = new Choice(); ColC

10、hoice.add(black); ColChoice.add(red); ColChoice.add(blue); ColChoice.add(green); ColChoice.addItemListener(this); /画笔大小选择 SizeChoice = new Choice(); SizeChoice.add(1); SizeChoice.add(3); SizeChoice.add(5); SizeChoice.add(7); SizeChoice.add(9); SizeChoice.addItemListener(this); /橡皮大小选择 EraserChoice =

11、 new Choice(); EraserChoice.add(5); EraserChoice.add(9); EraserChoice.add(13); EraserChoice.add(17); EraserChoice.addItemListener(this); toolPanel = new Panel(); /命令按钮 clear = new Button(清除); eraser = new Button(橡皮); pen = new Button(画笔); drLine = new Button(画直线); drCircle = new Button(画圆形); drRect

12、= new Button(画矩形); openPic = new Button(打开图画); savePic = new Button(保存图画); colchooser = new Button(显示调色板); /各组件事件监听 clear.addActionListener(this); eraser.addActionListener(this); pen.addActionListener(this); drLine.addActionListener(this); drCircle.addActionListener(this); drRect.addActionListener(t

13、his); openPic.addActionListener(this); savePic.addActionListener(this); colchooser.addActionListener(this); /标签 颜色 = new Label(画笔颜色,Label.CENTER); 大小B = new Label(画笔大小,Label.CENTER); 大小E = new Label(橡皮大小,Label.CENTER); /面板添加组件 toolPanel.add(openPic); toolPanel.add(savePic); toolPanel.add(pen); toolP

14、anel.add(drLine); toolPanel.add(drCircle); toolPanel.add(drRect); toolPanel.add(颜色); toolPanel.add(ColChoice); toolPanel.add(大小B); toolPanel.add(SizeChoice); toolPanel.add(colchooser); toolPanel.add(eraser); toolPanel.add(大小E); toolPanel.add(EraserChoice); toolPanel.add(clear); /工具面板到APPLET面板 add(to

15、olPanel,BorderLayout.NORTH); setBounds(60,60,900,600); setVisible(true); validate(); /强制显示容器 /dialog for save and load openPicture = new FileDialog(this,打开图画,FileDialog.LOAD); openPicture.setVisible(false); savePicture = new FileDialog(this,保存图画,FileDialog.SAVE); savePicture.setVisible(false); /强制关闭

16、窗口响应方法 openPicture.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) openPicture.setVisible(false); ); savePicture.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) savePicture.setVisible(false); ); addWindowListener(new WindowAdapter() publi

17、c void windowClosing(WindowEvent e) System.exit(0); ); /构造方法完毕 /绘图方法paint() public void paint(Graphics g) Graphics2D g2d = (Graphics2D)g; Point p1,p2; n = paintInfo.size(); /几何图元信息 if(toolFlag=2) g.clearRect(0,0,getSize().width,getSize().height);/清除 for(int i=0; in ;i+) p1 = (Point)paintInfo.element

18、At(i); p2 = (Point)paintInfo.elementAt(i+1); size = new BasicStroke(p1.boarder,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL); g2d.setColor(p1.col); g2d.setStroke(size); if(p1.tool=p2.tool) switch(p1.tool) case 0:/画笔 Line2D line1 = new Line2D.Double(p1.x, p1.y, p2.x, p2.y); g2d.draw(line1); break; cas

19、e 1:/橡皮 g.clearRect(p1.x, p1.y, p1.boarder, p1.boarder); break; case 3:/画直线 Line2D line2 = new Line2D.Double(p1.x, p1.y, p2.x, p2.y); g2d.draw(line2); break; case 4:/画圆 Ellipse2D ellipse = new Ellipse2D.Double(p1.x, p1.y, Math.abs(p2.x-p1.x) , Math.abs(p2.y-p1.y); g2d.draw(ellipse); break; case 5:/画

20、矩形 Rectangle2D rect = new Rectangle2D.Double(p1.x, p1.y, Math.abs(p2.x-p1.x) , Math.abs(p2.y-p1.y); g2d.draw(rect); break; case 6:/截断,跳过 i=i+1; break; default : /end switch /end if /end for /end绘图方法paint() /下拉式列表响应方法 public void itemStateChanged(ItemEvent e) if(e.getSource()=ColChoice) /预选颜色 String

21、name = ColChoice.getSelectedItem(); if(name=black) c = new Color(0,0,0); else if(name=red) c = new Color(255,0,0); else if(name=green) c = new Color(0,255,0); else if(name=blue) c = new Color(0,0,255); else if(e.getSource()=SizeChoice) /画笔大小 String selected = SizeChoice.getSelectedItem(); if(selecte

22、d=1) con = 1; size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL); else if(selected=3) con = 3; size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL); else if(selected=5) con = 5; size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL); else if(s

23、elected=7) con = 7; size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL); else if(selected=9) con = 9; size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL); /画笔大小if结束 else if(e.getSource()=EraserChoice) /橡皮大小 String Esize = EraserChoice.getSelectedItem(); if(Esi

24、ze=5) Econ = 5*2; else if(Esize=9) Econ = 9*2; else if(Esize=13) Econ = 13*2; else if(Esize=17) Econ = 17*3; /下拉式列表响应方法结束 /鼠标拖曳事件响应方法 public void mouseDragged(MouseEvent e) Point p1 ; switch(toolFlag) case 0:/画笔 x = (int)e.getX(); y = (int)e.getY(); p1 = new Point(x, y, c, toolFlag, con); paintInfo.

25、addElement(p1); repaint(); break; case 1:/橡皮 x = (int)e.getX(); y = (int)e.getY(); p1 = new Point(x, y, null, toolFlag, Econ); paintInfo.addElement(p1); repaint(); break; default : /鼠标拖曳事件响应方法结束 public void mouseMoved(MouseEvent e) /鼠标事件 public void update(Graphics g) /刷新重绘 paint(g); /鼠标press事件 publ

26、ic void mousePressed(MouseEvent e) Point p2; switch(toolFlag) case 3:/直线 x = (int)e.getX(); y = (int)e.getY(); p2 = new Point(x, y, c, toolFlag, con); paintInfo.addElement(p2); break; case 4: /圆 x = (int)e.getX(); y = (int)e.getY(); p2 = new Point(x, y, c, toolFlag, con); paintInfo.addElement(p2); b

27、reak; case 5: /矩形 x = (int)e.getX(); y = (int)e.getY(); p2 = new Point(x, y, c, toolFlag, con); paintInfo.addElement(p2); break; default : /鼠标press事件结束 /鼠标release事件:设置几何图元信息后调用paint() public void mouseReleased(MouseEvent e) Point p3; switch(toolFlag) case 0:/画笔 paintInfo.addElement(cutflag); break; case 1: /eraser paintInfo.addElement(cutflag); break; case 3:/直线 x = (int)e.getX(); y = (int

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1