JPEG图像生成器

NIIT-2综合训练

JPEG图像生成器

专业

学生姓名 班学

级 号

指导教师 完成日期

信息工程学院

目 录

一、综合训练的目的 .......................................................................................................................... 1 二、综合训练的内容 .......................................................................................................................... 1 三、综合训练的具体实现 .................................................................................................................. 1 四、综合训练的总结 .......................................................................................................................... 4 附录:源程序清单 .............................................................................................................................. 5

NIIT-2综合训练

一、综合训练的目的

(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:\makejpeg\java MakeJPEG

效果图如图所示:

图(A) 绘制图形 图(B) 获取屏幕图像

2. 可以使用jar.exe把这些文件压缩成一个JAR文件,以此来发布我们的应用程序 。我们可以把本Java应用程序中涉及到的类文件压缩成一个JAR文件,例如makeJPEG.jar。

首先,用文本编辑器首先,用文本编辑器(例如Windows下的记事本)编写一个清单文件(Manifestfiles): Manifest-Version:1.0

Main-Class:MakeJPEG

Created-By:1.2.2(Microsystems Inc.)

例如,清单文件名为moon.mf,保存到c:\makejpeg。 注意:在编写清单文件时,在“Manifest-Version:”和“1.0”之间、“Main-Class:”和主类“MakeJPEG”之间,以及“Created-By:”和“1.2.2”之间必须有且只有一个空格。

然后,如下生成JAR文件:

c:\makejpeg\jar 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) 主类MakeJPEG

1. 成员变量

表1 主要成员变量

成员变量

负责将图形绘制到图像 对象中的画笔 图像对象 窗口 按钮

颜色

鼠标位置坐标

2. 方法

表2 主要方法 名称

MakeJPEG

actionPerformed main

mouseDragged mouseMoved mousePressed mouseReleased mouseEntered mouseExited mouseClicked paint update

功能

创建画布

处理ActionEvent事件 程序开始运行 处理MouseEvent事件 处理MouseEvent事件 处理MouseEvent事件 处理MouseEvent事件 处理MouseEvent事件 处理MouseEvent事件 处理MouseEvent事件 负责图形绘制 负责更新图形绘制

备注

构造方法 接口方法

接口方法 接口方法 接口方法 接口方法 接口方法 接口方法 接口方法

变量类型 Graphics2D

BufferedImage Frame Button Color int

名称

ggg

Image window

保存,调色板,橡皮,清除,画笔,获取屏幕,绘制图形 画笔颜色 x,y

四、综合训练的总结

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 Point {int x,y;

Point(int x,int y) {this.x=x;this.y=y; } }

public class MakeJPEG extends Canvas 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);

implements

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;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(image); out.close(); }

catch(Exception EE) { } } }

else if(e.getSource()==获取屏幕) {

Robot robot=null; try{

robot=new Robot(); }

catch(Exception er)

{

}

Rectangle screenRect=null;

int width=getToolkit().getScreenSize().width;

int height=getToolkit().getScreenSize().height;

screenRect=new Rectangle(0,0,width,height);

window.setVisible(false);

this.window.setVisible(false);

image=robot.createScreenCapture(screenRect);

window.setVisible(true);

repaint();

}

else if(e.getSource()==调色板)

{

Color tempColor=JColorChooser.showDialog(window,"调色板",画笔颜色); {

if(tempColor!=null)

{

画笔颜色=tempColor;

画笔.setForeground(画笔颜色);

}

}

}

else if(e.getSource()==绘制图形)

{

window.dispose();

this.window.dispose();

MakeJPEG canvas=new MakeJPEG();

}

}

public static void main(String args[])

{

new MakeJPEG();

}

}

9

NIIT-2综合训练

JPEG图像生成器

专业

学生姓名 班学

级 号

指导教师 完成日期

信息工程学院

目 录

一、综合训练的目的 .......................................................................................................................... 1 二、综合训练的内容 .......................................................................................................................... 1 三、综合训练的具体实现 .................................................................................................................. 1 四、综合训练的总结 .......................................................................................................................... 4 附录:源程序清单 .............................................................................................................................. 5

NIIT-2综合训练

一、综合训练的目的

(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:\makejpeg\java MakeJPEG

效果图如图所示:

图(A) 绘制图形 图(B) 获取屏幕图像

2. 可以使用jar.exe把这些文件压缩成一个JAR文件,以此来发布我们的应用程序 。我们可以把本Java应用程序中涉及到的类文件压缩成一个JAR文件,例如makeJPEG.jar。

首先,用文本编辑器首先,用文本编辑器(例如Windows下的记事本)编写一个清单文件(Manifestfiles): Manifest-Version:1.0

Main-Class:MakeJPEG

Created-By:1.2.2(Microsystems Inc.)

例如,清单文件名为moon.mf,保存到c:\makejpeg。 注意:在编写清单文件时,在“Manifest-Version:”和“1.0”之间、“Main-Class:”和主类“MakeJPEG”之间,以及“Created-By:”和“1.2.2”之间必须有且只有一个空格。

然后,如下生成JAR文件:

c:\makejpeg\jar 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) 主类MakeJPEG

1. 成员变量

表1 主要成员变量

成员变量

负责将图形绘制到图像 对象中的画笔 图像对象 窗口 按钮

颜色

鼠标位置坐标

2. 方法

表2 主要方法 名称

MakeJPEG

actionPerformed main

mouseDragged mouseMoved mousePressed mouseReleased mouseEntered mouseExited mouseClicked paint update

功能

创建画布

处理ActionEvent事件 程序开始运行 处理MouseEvent事件 处理MouseEvent事件 处理MouseEvent事件 处理MouseEvent事件 处理MouseEvent事件 处理MouseEvent事件 处理MouseEvent事件 负责图形绘制 负责更新图形绘制

备注

构造方法 接口方法

接口方法 接口方法 接口方法 接口方法 接口方法 接口方法 接口方法

变量类型 Graphics2D

BufferedImage Frame Button Color int

名称

ggg

Image window

保存,调色板,橡皮,清除,画笔,获取屏幕,绘制图形 画笔颜色 x,y

四、综合训练的总结

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 Point {int x,y;

Point(int x,int y) {this.x=x;this.y=y; } }

public class MakeJPEG extends Canvas 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);

implements

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;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(image); out.close(); }

catch(Exception EE) { } } }

else if(e.getSource()==获取屏幕) {

Robot robot=null; try{

robot=new Robot(); }

catch(Exception er)

{

}

Rectangle screenRect=null;

int width=getToolkit().getScreenSize().width;

int height=getToolkit().getScreenSize().height;

screenRect=new Rectangle(0,0,width,height);

window.setVisible(false);

this.window.setVisible(false);

image=robot.createScreenCapture(screenRect);

window.setVisible(true);

repaint();

}

else if(e.getSource()==调色板)

{

Color tempColor=JColorChooser.showDialog(window,"调色板",画笔颜色); {

if(tempColor!=null)

{

画笔颜色=tempColor;

画笔.setForeground(画笔颜色);

}

}

}

else if(e.getSource()==绘制图形)

{

window.dispose();

this.window.dispose();

MakeJPEG canvas=new MakeJPEG();

}

}

public static void main(String args[])

{

new MakeJPEG();

}

}

9


相关内容

  • 一种半脆弱型的图像水印认证
  • 第14卷 第2期集美大学学报(自然科学版) Journa l o f Ji m e iU n i versity (N atura l Sc ience) V o. l 14 N o . 2 [文章编号]1007-7405(2009) 02-0041-06 一种新颖的半脆弱图像水印认证技术 付永钢 ...

  • 基于数字签名方式的图像鉴别方法
  • 第41卷 第3期2011年5月 吉林大学学报(工学版) )JournalofJilinUniversitEnineerinandTechnoloEdition y(gggy ol.41 No.3 V a2011 My 基于数字签名方式的图像鉴别方法 2222 ,,,陈海鹏1,申铉京1,李晓飞1,吕颖 ...

  • 图像文件格式
  • 目录 i. ii. iii. iv. PNG 便携式网络图形(Portable Network Graphics,PNG )是一种无损压缩的位图图形格式,支持索引.灰度.RGB [A]三种颜色方案以及Alpha 通道等特性.PNG 的开发目标是改善并取代GIF 作为适合网络传输的格式而不需专利许可, ...

  • JPEG2000图像压缩算法标准
  • JPEG2000图像压缩算法标准 摘要:JPEG2000是为适应不断发展的图像压缩应用而出现的新的静止图像压缩标准.本文介绍了JPEG2000图像编码系统的实现过程, 对其中采用的基本算法和关键技术进行了描述,介绍了这一新标准的特点及应用场合,并对其性能进行了分析. 关键词:JPEG2000:图像压 ...

  • Abode平面设计师认证考试题
  • Abode 平面设计师认证考试题 Abode 平面设计师认证考试励题 Photoshop 科 1 下列哪个是Photoshop图像最基本的组成单元: A.节点 B.色彩空间 C.像素 D.路径 答案: 2 下列对矢量图和像素图描述正确的是: A.矢量图(Vector Image)的基本组成单元是像素 ...

  • MQ算术编码原理及实现
  • MQ算术编码器原理及实现 郭晴 北京邮电大学信息与通信工程学院,北京(100876) E-mail: 摘 要:JPEG2000标准中, MQ算术编码是熵编码的主要部分.MQ算术编码器是一种基于上下文的自适应二进制算术编码器.它基于上下文以利于解除信源相关性,利用条件交换和概率估计状态机中的贝叶斯学习 ...

  • 比较常见的图片格式说明(耐心看完终身受益)
  • 比较常见的图片格式说明(耐心看完终身受益) BMP (位图) Windows系统里面的标准通用图像格式.使用很普遍,结构简单,不经过压缩,所以图片一般不会失真,但是很多地方并不支持上传,因为图片占用空间会比较大.在PS 里面不支持通道. JPEG (位图) 也是应用非常广泛的静态图片格式之一,它是用 ...

  • 计算机图像处理概述
  • 计算机图像处理 结 课 作 业 姓名:李 晓 通 学号:10360217 班级:10级信管2班 联系方式:[1**********] 目录 一.图像处理的基本概念„„„„„„„„„„„„„„„„„„„ 3 二.数字图像压缩编码技术的产生及发展过程„„„„„„„„„„ 3 三.图像数据压缩原理„„„„ ...

  • 单反相机初级入门教程
  • 单反全教程 前言 自从数码单反相机诞生以来,整个摄影界发生了巨大的变化.我们可以使用数码单反做很多胶片相机所无法胜任的工作,这已经是无可否认的事实.拍摄本身由此变得更加简单.数码单反相机继承了很多胶片单反相机的基本构造,在操作方面也有很多共通点.对于用惯了佳能EOS系列胶片单反相机的用户来说,掌握佳 ...