已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实 验 报 告课程名称 计算机图形学 实验名称 二维绘图 姓 名 李欣 学 号 200707040226 专业班级 软件0702 实验日期 2010 年 11 月 5 日 成绩 指导教师 一、 实验目的1. 实现用Besenham或DDA 方法绘制直线、圆或椭圆及绘制Bezier曲线和B样条曲线。掌握基本图形的绘制算法2. 实现多义线、手绘线、矩形、多边形的绘制3. 实现区域填充及取消填充4. 了解图形的选择、旋转、平移、缩放的原理与方法。二、 实验环境Windows XP 系统 JCreaetor pro 三、 实验内容与步骤(可提供屏幕抓图)1.【文件】-【新建】-【File】 建立一个Java.class文件,如图2.类名命名为huitu 选择存放路径,点击确实出现代码编辑区,如图:3.在代码编辑区输入以后代码:部分代码如下:调用glTrantlatef() 实现图形的平移调用glRotatef()实现图形的旋转import javax.swing.*;import javax.swing.filechooser.FileNameExtensionFilter;import java.awt.*;import java.awt.event.*;import java.awt.image.BufferedImage;import javax.imageio.ImageIO;/这个类实现图像的打开和保存public class Huatu extends JPanel implements MouseListener,MouseMotionListener, ActionListener private JFrame f2, f1;private int xBegin = 0, yBegin = 0, xEnd = 0, yEnd = 0;/ 开始和结束点坐标private JButton btReLine, btRect, btOval, btPen, btEraser;/ 线,方,圆private JToolBar tb;private int i = 0;/ 0,直线;1方;2,圆;3/ 最后的图形要保存下来,使用缓冲图像private BufferedImage bImage;private Graphics gg;/ 图像专用画笔private JFileChooser jfc;private JButton btSave, btOpen, btAbout;private JButton btColor;/ 选择颜色private Color myColor;private Label label1;public Huatu() / BufferedImage.TYPE_INT_RGB 图像类型 标准的三基色bImage = new BufferedImage(800, 600, BufferedImage.TYPE_INT_RGB);f2 = new JFrame(简单画图板);btReLine = new JButton(直线);btRect = new JButton(矩形);btOval = new JButton(圆);btAbout = new JButton(关于作者);btSave = new JButton(Save(保存);btOpen = new JButton(Open(打开);tb = new JToolBar();jfc = new JFileChooser();FileNameExtensionFilter filter = new FileNameExtensionFilter(JPG,jpg);jfc.setFileFilter(filter);btColor = new JButton(选择颜色);myColor = Color.BLACK;/ 默认颜色黑色btColor.setBackground(Color.RED);/ 因为缓冲图像是刚创建的,所以默认颜色是黑色/ 得到图像专用画笔gg = bImage.getGraphics();gg.setColor(Color.white);/ 将画笔调整为白色gg.fillRect(0, 0, 800, 600);/ 将图像涂白gg.setColor(Color.BLACK);/ 将画笔从新调成黑色tb.add(btReLine);tb.add(btRect);tb.add(btOval);tb.add(btOpen);tb.add(btSave);tb.add(btColor);tb.add(btAbout);btReLine.addActionListener(this);btRect.addActionListener(this);btOval.addActionListener(this);btAbout.addMouseListener(new MouseAdapter() public void mouseClicked(MouseEvent e) About_me(););btOpen.addActionListener(this);btSave.addActionListener(this);btColor.addActionListener(this);this.setLayout(new BorderLayout();this.add(tb, BorderLayout.NORTH);this.addMouseListener(this);this.addMouseMotionListener(this);f2.add(this);f2.setBounds(200, 200, 800, 600);f2.setVisible(true);f1 = new JFrame(关于作者);setLayout(new FlowLayout(FlowLayout.CENTER, 20, 20);f1.add(new Label( 此程序由软件0702-王凯 编写);f1.setLayout(new GridLayout(1, 1);f1.setFont(new Font(宋体, 15, 15);f1.pack();f1.setBounds(400, 400, 400, 100);f1.setResizable(false);f1.show();f1.setVisible(false);f1.addWindowListener(new java.awt.event.WindowAdapter() public void windowClosing(java.awt.event.WindowEvent e)f1.setVisible(false););public void About_me() f1.setVisible(true);public void paintComponent(Graphics g) / 设置画笔颜色g.setColor(myColor);/ 手工强制清空面板super.paintComponent(g);/ 为了能够看到最终效果,所以将缓冲图像也画到面板上g.drawImage(bImage, 0, 0, null);if (i = 0)/ lineg.drawLine(xBegin, yBegin, xEnd, yEnd);else / 其他图形需要判断起始点和宽高int x, y, width, height;if (xBegin xEnd)x = xEnd;elsex = xBegin;if (yBegin yEnd)y = yEnd;elsey = yBegin;width = Math.abs(xBegin - xEnd);/ abs取绝对值height = Math.abs(yBegin - yEnd);if (i = 1)/ rectg.drawRect(x, y, width, height);else if (i = 2)/ ovalg.drawOval(x, y, width, height);public static void main(String args) new Huatu();public void mouseClicked(MouseEvent e) public void mousePressed(MouseEvent e) / 按下鼠标的时候,记录开始点的坐标this.xBegin = e.getX();this.yBegin = e.getY();public void mouseReleased(MouseEvent e) / 松开鼠标,确认最终的图形需要保存在缓冲图像上if (i = 0)gg.drawLine(xBegin, yBegin, xEnd, yEnd);else / 其他图形需要判断起始点和宽高int x, y, width, height;if (xBegin xEnd)x = xEnd;elsex = xBegin;if (yBegin yEnd)y = yEnd;elsey = yBegin;width = Math.abs(xBegin - xEnd);/ abs取绝对值height = Math.abs(yBegin - yEnd);if (i = 1)/ rectgg.drawRect(x, y, width, height);else if (i = 2)/ ovalgg.drawOval(x, y, width, height);public void mouseDragged(MouseEvent e) / 记录拖动的时候的结束点this.xEnd = e.getX();this.yEnd = e.getY();/ 每次拖动,都需要重绘面板,显示最的图形this.repaint();public void mouseEntered(MouseEvent e) public void mouseExited(MouseEvent e) public void mouseMoved(MouseEvent e) public void actionPerformed(ActionEvent e) if (e.getSource() = this.btReLine)/ 线i = 0; else if (e.getSource() = this.btRect)/ 方i = 1; else if (e.getSource() = this.btOval)/ 圆i = 2;else if (e.getSource() = this.btOpen)/ 打开int i = jfc.showOpenDialog(this.f2);if (i = JFileChooser.APPROVE_OPTION) try / 将文件图像加载到内存中bImage = ImageIO.read(jfc.getSelectedFile();/ 更换图像以后,画笔也必须更换为新的画笔gg = bImage.getGraphics();/ 画笔默认白色gg.setColor(myColor);/ 为了防止打开图片以后,出现一个乱图,处理一下this.xBegin = 100;this.yBegin = 0;this.xEnd = 0;this.yEnd = 0;this.repaint(); catch (Exception ex) ex.printStackTrace(); else if (e.getSource() = this.btSave)/ 保存int i = jfc.showSaveDialog(this.f2);if (i = JFileChooser.APPROVE_OPTION) t
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中学防洪水应急预案(3篇)
- 教官专业知识笔试题库及答案
- 2025年建筑施工技术题库及答案
- 2025年战略规划师岗位招聘面试参考题库及参考答案
- 2025年培训师岗位招聘面试参考题库及参考答案
- 2025年电子支付专员岗位招聘面试参考试题及参考答案
- 2025年销售副总监岗位招聘面试参考试题及参考答案
- 2025年数字内容创作者招聘面试题库及参考答案
- 2025年电信技术支持岗位招聘面试参考试题及参考答案
- 2025年增值税审核专员岗位招聘面试参考题库及参考答案
- 《童年》读书分享PPT
- 小学数学-《出入相补-平行四边形的面积》教学课件设计
- 年小区业委会工作经费预算说明
- 货运安全责任制度
- 北师大版六年级上册数学《练习二》
- 失业证明模板(通用6篇)
- T、K、Y管节点焊缝超声波检验缺陷的判定
- YS/T 781.4-2012铝及铝合金管、棒、型材行业清洁生产水平评价技术要求第4部分:氟碳漆喷涂产品
- ZJ70DB钻机绞车安装、操作及维护保养规程
- GB/T 20220-2006塑料薄膜和薄片样品平均厚度、卷平均厚度及单位质量面积的测定称量法(称量厚度)
- 汽车 照明与信号系统检修精品课件
评论
0/150
提交评论