JPEG图像生成器.doc_第1页
JPEG图像生成器.doc_第2页
JPEG图像生成器.doc_第3页
JPEG图像生成器.doc_第4页
JPEG图像生成器.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

NIIT2综合训练JPEG图像生成器专业学生姓名班级学号指导教师完成日期信息工程学院目 录一、综合训练的目的1二、综合训练的内容1三、综合训练的具体实现1四、综合训练的总结4附录:源程序清单5NIIT2综合训练一、综合训练的目的(1) 进一步巩固所学的Java语言基础知识,达到熟练编写、运用的程度;(2) 锻炼自己的面向对象的程序设计思想,能够深刻认识面向过程与面向对象两种设计方法之间的区别;(3) 熟练掌握具体软件开发平台下(NetBeans)的动手能力,掌握Java应用程序设计的方法与技巧,实现从传统面向过程程序设计思维到面向对象程序设计思维的转型;(4) 初步了解MIS的概念与相关知识,具备独立设计、实现小型MIS系统的应用开发能力。二、综合训练的内容1题目:JPEG图像生成器三、综合训练的具体实现1设计内容要求程序能进行图像绘制并将绘制内容保存成JPEG格式文件,同时也能将计算机屏幕显示内容保存成JPEG格式文件。2设计要求1) JPEG是被广泛使用的一种图像文件格式,本设计要求程序能将程序中绘制的图形保存为JPEG文件格式。2)有时人们需要获取计算机屏幕上显示的图像,本程序要求能将屏幕图像保存为JPEG文件格式。3总体设计JPEG图像生成器有一个Java源文件组成。主类中有一个画布(Canvas)对象和一个图像(Image)对象以及两个不同用途的画笔(Graphicis)对象。其中,第一个画笔对象的功能实在画布上绘制,第二个画笔的功能是把第一个画笔在画布上绘制的内容再绘制到图像中。将图像保存为JPEG文件由JPEG编码器(JPEGImageEncoder)负责。获取计算机屏幕图像则有Robot对象负责。屏幕图像同时绘制到画布上和图像中,并由JPEG编码器将图像保存为JPEG文件。4具体设计1) 运行效果与程序发布1. 将Java文件保存到一个文件夹中,例如C:makejpeg。将该Java文件编译生成相应的字节码(class)文件。然后用java解释器运行主类:C:makejpegjava MakeJPEG效果图如图所示: 图(A) 绘制图形 图(B) 获取屏幕图像2. 可以使用jar.exe把这些文件压缩成一个JAR文件,以此来发布我们的应用程序。我们可以把本Java应用程序中涉及到的类文件压缩成一个JAR文件,例如makeJPEG.jar。 首先,用文本编辑器首先,用文本编辑器(例如Windows下的记事本)编写一个清单文件(Manifestfiles):Manifest-Version:1.0Main-Class:MakeJPEGCreated-By:1.2.2(Microsystems Inc.)例如,清单文件名为moon.mf,保存到c:makejpeg。注意:在编写清单文件时,在“Manifest-Version:”和“1.0”之间、“Main-Class:”和主类“MakeJPEG”之间,以及“Created-By:”和“1.2.2”之间必须有且只有一个空格。然后,如下生成JAR文件:c:makejpegjar cfm makeJPEG.jar moon.mf *.class其中,参数c表示要生成一个新的JAR文件:f表示要生成的JAR文件的名字;m表示文件清单的名字。现在就可以将makeJEPG.jar拷贝到任何一个安装了java运行环境(版本号需高于1.2.2)的计算机上,只要用鼠标双击该文件就可以运行该java应用程序了。注意:如果机器上没有安装过中文版WinRAR解压缩软件,那么makeJPEG.jar的文件类型是Executable Jar File.如果机器上安装过中文版WinRAR解压缩软件,并将.jar文件于该解压缩软件做了关联,那么makeJPEG.jar的文件类型是WinRAR,在这种情况下,当鼠标双击该文件时,WinRAR解压缩软件会自动运行解压缩操作,使得我们的java程序无法运行。因此,在发布本系统时,还应该创建一个有如下内容的bat文件makeJPEG.bat(用文本编辑器):Javaw -jar makeJPEG.jar另外在创建一个帮助文件help.txt,内容如下:您可以用鼠标双击makeJPEG.jar或makeJPEG.bat来运行软件,但是您的计算机上安装了中文版WinRAR解压缩软件,并将jar文件于该解压缩软件做了关联,那么,当用鼠标双击makeJPEG.jar文件时WinRAR解压缩软件会自动运行解压缩操作,这时您可以双击makeJPEG.bat来运行我们的软件。最后,将.bat文件、.jar文件和帮助文件一同发布。2) 主类MakeJPEG1. 成员变量表1 主要成员变量成员变量变量类型名称负责将图形绘制到图像Graphics2Dggg对象中的画笔图像对象BufferedImageImage窗口Framewindow按钮Button保存,调色板,橡皮,清除,画笔,获取屏幕,绘制图形颜色Color画笔颜色 鼠标位置坐标intx,y2. 方法 表2 主要方法名称功能备注MakeJPEG创建画布构造方法actionPerformed处理ActionEvent事件接口方法main程序开始运行mouseDragged处理MouseEvent事件接口方法mouseMoved处理MouseEvent事件接口方法mousePressed处理MouseEvent事件接口方法mouseReleased处理MouseEvent事件接口方法mouseEntered处理MouseEvent事件接口方法mouseExited处理MouseEvent事件接口方法mouseClicked处理MouseEvent事件接口方法paint负责图形绘制update负责更新图形绘制四、综合训练的总结 Java是一门面向对象的语言,相对于其他的语言而言,学习起来比较简单,容易上手,但是要想深入研究还是具有一定难度的。我研究的课题是JPEG图像生成器,与其他课题相比,比较简单,内容也不多。JPEG图像生成器由1个java源文件组成。主类中有一个画布对象和一个图像对象以及两个不同用途的画笔对象。其中,第一个画笔对象的功能是在画布上绘制。第二个画笔的功能是把第一个画笔在画布上绘制的容绘制到图像对象中,将图像对象保存成JPEG文件由JPEG编码器负责。获取计算机屏幕图像则由Robot对象负责。屏幕图像同时绘制到画布上和图像对象中,并由JPEG编码器将图像对象保存成JPEG文件。JPEG本身只有描述如何将一个影像转换为字节的数据串流(streaming),但并没有说明这些字节如何在任何特定的储存媒体上被封存起来。但是JPEG压缩技术十分先进,它用有损压缩方式去除冗余的图像数据,在获得极高的压缩率的同时能展现十分丰富生动的图像,换句话说,就是可以用最少的磁盘空间得到较好的图像品质。而且 JPEG是一种很灵活的格式,具有调节图像质量的功能,允许用不同的压缩比例对文件进行压缩,支持多种压缩级别,压缩比率通常在10:1到40:1之间,压缩比越大,品质就越低;相反地,压缩比越小,品质就越好。参照书上的源程序代码,在调试运行的时候还是出现了一些差错,经过一番研究和修改,终于得到了预想的效果。这个程序虽然不复杂,但是要想自己设计,写出源代码还是具有一定的难度的。可见,我要学习的东西还有很多,只有不断地积累经验,才能使自己的知识得到扩充,写出更加复杂,更加有难度的程序。这次的课程设计让我对Java有了更加深刻的理解和认识,要学习的东西还有很多,继续努力吧。附录:源程序清单import java.awt.*;import java.util.*;import java.awt.geom.*;import java.awt.image.*;import java.awt.event.*;import java.io.*;import javax.swing.*;import com.sun.image.codec.jpeg.*;class Pointint x,y; Point(int x,int y) this.x=x;this.y=y; public class MakeJPEG extends Canvas implements MouseMotionListener,MouseListener,ActionListener int x=-1,y=-1,橡皮擦通知=0,清除通知=0; Vector v=null;int n=1; Graphics2D ggg ; BufferedImage image; Frame window; Button 保存,调色板,橡皮,清除,画笔,获取屏幕,绘制图形; Color 画笔颜色; Panel pCenter,pSouth,pNorth; public MakeJPEG() 保存=new Button(将绘制的图形或屏幕保存为JPG文件); 获取屏幕=new Button(获取屏幕); 绘制图形=new Button(绘制图形); 调色板=new Button(打开调色板); 画笔=new Button(画笔); 橡皮=new Button(橡皮); 清除=new Button(清除); 调色板.addActionListener(this); 绘制图形.addActionListener(this); 保存.addActionListener(this); 画笔.addActionListener(this); 橡皮.addActionListener(this); 清除.addActionListener(this); 获取屏幕.addActionListener(this); 画笔颜色=new Color(0,0,0); addMouseMotionListener(this); addMouseListener(this); v=new Vector(); setBackground(Color.white); image=new BufferedImage(200,200,BufferedImage.TYPE_INT_RGB); ggg=image.createGraphics(); Rectangle2D rect=new Rectangle2D.Double(0,0,200,200); ggg.setColor(getBackground(); ggg.fill(rect); window=new Frame(JPEG图像生成器); pCenter=new Panel(); pCenter.setLayout(null); pCenter.add(this); pCenter.setBackground(Color.gray); this.setBounds(80,30,210,210); window.add(pCenter,BorderLayout.CENTER); pNorth=new Panel(); pNorth.add(保存); pNorth.add(绘制图形); pNorth.add(获取屏幕); window.add(pNorth,BorderLayout.NORTH); pSouth=new Panel(); pSouth.add(调色板); pSouth.add(橡皮); pSouth.add(清除); pSouth.add(画笔); window.add(pSouth,BorderLayout.SOUTH); window.setVisible(true); window.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); window.setBounds(100,80,390,380); window.validate(); public void paint(Graphics g) if(x!=-1&y!=-1&橡皮擦通知=0&清除通知=0) g.setColor(画笔颜色); n=v.size(); for(int i=0;in-1;i+) Point p1=(Point)v.elementAt(i); Point p2=(Point)v.elementAt(i+1); g.drawLine(p1.x,p1.y,p2.x,p2.y); ggg.setColor(g.getColor(); ggg.drawLine(p1.x,p1.y,p2.x,p2.y); else if(橡皮擦通知=1&清除通知=0) g.setColor(getBackground(); g.fillRect(x-2,y-2,4,4); ggg.setColor(getBackground(); ggg.fillRect(x-2,y-2,4,4); else if(清除通知=1&橡皮擦通知=0) g.setColor(getBackground(); g.fillRect(0,0,200,200); ggg.setColor(getBackground(); ggg.fillRect(0,0,200,200); g.drawImage(image,0,0,200,200,this); public void mouseDragged(MouseEvent e) x=(int)e.getX(); y=(int)e.getY(); Point p=new Point(x,y); v.addElement(p); repaint(); public void mouseMoved(MouseEvent e) public void mousePressed(MouseEvent e) public void mouseReleased(MouseEvent e) v.removeAllElements(); public void mouseEntered(MouseEvent e) public void mouseExited(MouseEvent e) public void mouseClicked(MouseEvent e) public void update(Graphics g) paint(g); public void actionPerformed(ActionEvent e) if(e.getSource()=橡皮) 橡皮擦通知=1; 清除通知=0 ; else if(e.getSource()=清除) 清除通知=1; 橡皮擦通知=0; repaint(); else if(e.getSource()=画笔) 橡皮擦通知=0; 清除通知=0; else if(e.getSource()=保存) FileDialog savedialog=new FileDialog(window,保存图型到JPG格式,FileDialog.SAVE); savedialog.setVisible(true); if(savedialog.getFile()!=null) try String fileName=savedialog.getFile(); FileOutputStream out=new FileOutputStream(fileName); JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(out); JPEGEncodeParam param=encoder.getDefaultJPEGEncodeParam(image); param.setQuality(1.0f,false); encoder.setJPEGEncodeParam(param); encoder.encode(i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论