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 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;i<n-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(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();
}
}
分享到:
相关推荐
JPEG Toolbox 是一个专门为处理JPEG(Joint Photographic Experts Group)图像格式设计的工具箱,主要包含对JPEG文件的读取和写入功能。JPEG是一种广泛使用的有损图像压缩标准,适用于存储和传输高质量的彩色图像。...
JPEG(Joint Photographic Experts Group)是一种广泛应用于数字图像和照片的有损压缩标准,由国际电信联盟(ITU)下属的T.83工作组制定。这个标准定义了一套算法,能够将高分辨率、色彩丰富的图像数据压缩到较小的...
这个压缩包“JPEG2000_jpeg2000matlab_JPEG2000_zip_”显然是与JPEG2000标准相关的MATLAB实现,这将帮助我们理解和应用JPEG2000技术。 JPEG2000的核心是基于离散小波变换(DWT)的编码方法,相比JPEG中的离散余弦...
JPEG(Joint Photographic Experts Group)是一种广泛应用于数字图像和照片的有损压缩标准,它能够有效地减小图像文件的大小,以便于存储和传输。JPEG压缩编码系统是JPEG标准的核心部分,涉及到图像处理、数字信号...
在图像处理领域,JPEG(Joint Photographic Experts Group)是一种广泛使用的有损压缩标准,它能够有效地减少图像文件的大小,从而节省存储空间和网络传输时间。本篇文章将深入探讨如何利用MATLAB进行JPEG图像的压缩...
JPEG2000是一种先进的数字图像压缩标准,它在2000年由国际电信联盟(ITU)和国际标准化组织(ISO)联合推出,是JPEG(Joint Photographic Experts Group)的升级版。相比于传统的JPEG,JPEG2000具有更高的压缩效率、...
JPEG(Joint Photographic Experts Group)是一种广泛用于存储和传输数字图像的有损压缩标准。它在互联网、照片存储和许多其他领域中具有重要的地位。在本主题中,我们主要关注的是`jpeg.lib`文件,这是一个与JPEG...
JPEG(Joint Photographic Experts Group)是一种广泛用于存储和传输数字图像的有损压缩标准。jpeglib是用于处理JPEG图像的C语言库,它提供了一系列的API接口,方便开发者进行JPEG图像的编码、解码和处理。这个...
在图像处理领域,JPEG(Joint Photographic Experts Group)是一种广泛使用的有损压缩标准,用于存储和传输数字图像。本文将深入探讨C++中JPEG图像的编码与解码过程,以及相关的技术要点。 首先,理解JPEG编码的...
JPEG(Joint Photographic Experts Group)是一种广泛用于图像压缩的标准,其在数字图像处理领域具有重要地位。`libjpeg`是一个开源的JPEG编码和解码库,它为开发者提供了处理JPEG图像的功能。`jpeg-9d`是libjpeg的...
**JPEG_LS.rar** 是一个包含JPEG-LS标准的源代码实现的压缩文件,该标准是一种无损或近无损的图像压缩方法。无损压缩意味着在解压后,原始数据可以完全恢复,没有任何质量损失。这与有损压缩如JPEG(Joint ...
在图像处理领域,JPEG(Joint Photographic Experts Group)是一种广泛使用的有损压缩标准,尤其适用于照片和其他连续色调的图像。MATLAB作为一个强大的数值计算和数据分析环境,提供了方便的工具来实现JPEG编码和...
JPEGlib.lib文件是JPEG图像编码和解码库的链接库,它是JPEG(Joint Photographic Experts Group)标准在C语言环境中实现的一部分。JPEG是一种广泛使用的有损图像压缩格式,尤其适用于照片和其他连续色调的图像。这个...
JPEG(Joint Photographic Experts Group)是一种广泛使用的有损数字图像压缩标准,由ISO和IEC于1986年联合成立的专家委员会制定。它的主要目的是为了减少图像文件的大小,以便于存储和传输,同时尽可能保持图像的...
JPEG(Joint Photographic Experts Group)是一种广泛使用的有损图像压缩标准,主要应用于数码照片和互联网图像传输。在FPGA(Field-Programmable Gate Array)上实现JPEG编码或解码可以提供高效、实时的图像处理...
JPEG(Joint Photographic Experts Group)是一种广泛使用的有损图像压缩标准,它通过去除人眼不易察觉的图像细节来实现高效的数据压缩。在MATLAB中实现JPEG编码和解码可以帮助我们理解其背后的算法原理。MATLAB作为...
标题 "MATLAB版的JPEG编解码" 涉及的是使用MATLAB实现JPEG(Joint Photographic Experts Group)图像压缩标准的过程。JPEG是一种广泛使用的有损图像压缩算法,尤其适用于照片和其他连续色调的图像。其核心原理包括...
在图像处理领域,JPEG(Joint Photographic Experts Group)是一种广泛使用的有损压缩标准,尤其适用于照片和其他连续色调的图像。本项目是用C++语言实现的JPEG压缩算法,旨在帮助开发者理解和应用JPEG压缩技术。...
JPEG2000是一种先进的数字图像压缩标准,它在2000年由国际电信联盟(ITU)和国际标准化组织(ISO)联合推出,是JPEG(Joint Photographic Experts Group)的升级版。相比于传统的JPEG,JPEG2000具有更高的压缩效率、...
JPEGDecoder.rar 文件包含了一个JPEG解码器的Verilog实现,这是一种使用硬件描述语言(HDL)来设计数字系统的工具。JPEG(Joint Photographic Experts Group)是一种广泛使用的有损图像压缩标准,而JPEG解码器则是将...