资源预览内容
第1页 / 共7页
第2页 / 共7页
第3页 / 共7页
第4页 / 共7页
第5页 / 共7页
第6页 / 共7页
第7页 / 共7页
亲,该文档总共7页全部预览完了,如果喜欢就下载吧!
资源描述
本文格式为Word版,下载可任意编辑计算机图形学实验6实验报告 计算机图形学测验6测验报告 测验题目: 简朴Java绘图板程序 测验内容:1 阅读理解本试验供给的参考资料。 2编写并调通一个简朴绘图板的java程序。 参考资料:1 pb.java 2 Java图形处理介绍.doc 根本概念: 直接颜色模型(DirectColorModel):直接颜色模型在程序中指定整型数中的多少位和哪些位分别用于表示alpaha、红、绿、蓝四个属性。 索引颜色模型:索引颜色模型把颜色值看成红、绿、蓝数值查找表中的索引,在Java中索引是个字节。实际要查找3个表,各对应一个主颜色(另外,你还可以用第4个表查找ALPHA)。每个表项包含8位,用于指定颜色强度。 图形查看者(ImageObserver):图形查看者机制是Observer设计模式的一个例子。其思路是让任意个其它对象“查看”一个对象。被查看对象产生查看者要知道的变更时,被查看对象调用全体查看者。被查看对象可以抉择何时通知查看者。 媒介跟踪器(MediaTracker):媒介跟踪器MediaTracker在处理动画播放程序或多幅图象时有广泛的应用。为达成图象平滑的效果,通常小程序和应用程序要在某个图形完全装入后才能工作。 内存图形源(MemoryImageSource):在Java中另一种图形源是内存:可以在程序中建立整形或字节数组来表示图素值,并利用Java的MemoryImageSource类构造Image的实例。 过滤器(ImageFilter):AWT通过允许你在图象生成者和图象使用者之间插入图象过滤器的方式支持对图象的操作。一个图象过滤器实际上就是一个ImageFilter类,它放置在一个生产者和一个使用者之间,在使用者得到图象之前变更图象的数据。 客户程序:客户程序由三个类组成:client类,network类和writer类。Client类是其主体片面,此类由Frame类扩展而来,Writer类是在network类中启动的线程。 算法设计: 1、绘图方法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.elementAt(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); 绘制图形用到类Graphics2D,其中包括好多绘制图形的方法,定义一个Graphics2D类g,用getGraphics()来得到一个Graphics2D对象,它相当于组建的绘图环境,可以举行各种绘图操作。 定义一个BasicStroke类size来确定画笔的大小,其中BasicStroke类定义针对图形图元轮廓呈现属性的一个根本集合,这些图元使用Graphics2D 对象呈现,而该对象的Stroke 属性设置为此BasicStroke。其中con为画笔宽度,CAP_BUTT指无装饰地终止未封闭的子路径和虚线线段,JOIN_BEVEL通过直线连接宽体轮廓的外角,将路径线段连接在一起。 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, p2.x, p2.y); g2d.draw(line2); break; case 4:/画圆 Ellipse2D ellipse = new Ellipse2D.Double(p1.x, 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, 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() 3、对画笔大小的设定,和对橡皮大小的设定。 p1.y, p1.y, String selected = SizeChoice.getSelectedItem(); if(selected= con = 1; size = BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL); /橡皮大小 String Esize = EraserChoice.getSelectedItem(); if(Esize= Econ = 5*2; else if(Esize= Econ = 9*2; else if(Esize= Econ = 13*2; else if(Esize= Econ = 17*3; 代码: new /构造方法 paintboard(String s) super(s); addMouseMotionListener(this); addMouseListener(this); paintInfo = new Vector(); /几何图元信息 /*各工具按钮及选择项*/ /颜色选择 ColChoice = new Choice(); ColChoice.add(ColChoice.add(ColChoice.add(ColChoice.add( ColChoice.addItemListener(this); /画笔大小选择 SizeChoice = new Choice(); SizeChoice.add(SizeChoice.add(SizeChoice.add(SizeChoice.add(SizeChoice.add( SizeChoice.addItemListener(this); /橡皮大小选择 EraserChoice = new Choice(); EraserChoice.add(EraserChoice.add(EraserChoice.add(EraserChoice.add( EraserChoice.addItemListener(this); toolPanel = new Panel(); /命令按钮 clear = new Button(除掉eraser = new Button(橡皮pen = new Button(画笔drLine = new Button(画直线drCircle = new Button(画圆形drRect = 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(this); openPic.addActionListener(this); savePic.addActionListener(this); colchooser.addActionListener(this); /标签 颜色 = new Label(画笔颜色大小B = new Label(画笔大小 大小E = new Label(橡皮大小/面板添加组件 toolPanel.add(openPic); toolPanel.add(savePic); toolPanel.add(pen); toolPanel.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(toolPanel,BorderLayout.NORTH); setBounds(60,60,900,600); setVisible(true); validate(); /
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号