JAVA图片浏览器论文.docx
《JAVA图片浏览器论文.docx》由会员分享,可在线阅读,更多相关《JAVA图片浏览器论文.docx(14页珍藏版)》请在冰豆网上搜索。
JAVA图片浏览器论文
JAVA语言课程设计
设计题目:
图像放大缩小器
任务目标:
做一个用户图形界面的图像放大缩小器,可以对符合格式的图像文件进行放大与缩小。
学院:
软件学院
班级:
应用技术四班
姓名:
韩公达
学号:
410820010414
日期:
2009/7/8
目录
JAVA语言课程设计1
目录2
1设计要求1
1.1程序要求1
1.2运行效果1
1.2.1主界面1
1.2.2打开文件选择对话框2
1.2.3载入文件2
1.2.4放大图片3
1.2.4缩小图片3
2程序整体设计说明3
2.1程序中所使用的类3
2.2.主要成员方法4
2.3内部类4
2.3异常处理说明4
2.4算法5
2.4.1扫描图像文件5
2.4.2放大与缩小5
2.4.3过滤图像5
2.4.4在面板上画图6
2.5程序中所涉及的包6
2.6源代码6
参考文献12
致谢13
1设计要求
1.1程序要求
本程序是一个图形用户界面程序,可一对图像文件进行放大与缩小,刚载入的文件显示原始尺寸,图像的内设格式是.jif、.jpg、.jpeg。
1.2运行效果
1.2.1主界面
图1-1主界面
1.2.2打开文件选择对话框
图1-2打开文件选择对话框
1.2.3载入文件
图1-3载入文件
1.2.4放大图片
图1-4放大图片
1.2.4缩小图片
图1-5缩小图片
2程序整体设计说明
2.1程序中所使用的类
类名:
publicclassScaleImageDemo
作用:
主类
继承的父类:
JFrame
类名:
classButtonActionListener
作用:
按钮事件处理
实现接口:
ActionListener
类名:
classScalePaner
作用:
显示图像的面板
继承的父类:
Jpanel
2.2.主要成员方法
publicScaleImageDemo()构造方法
publicvoidfileSelect()图像文件选择器
publicstaticvoidmain(String[]args)驱动
publicvoidactionPerformed(ActionEvente)按钮事件处理
publicvoidloadImage(StringfileName)载入图像
publicvoidpaint(Graphicsg)重载容器的paintComponent()方法
2.3内部类
类名:
classButtonActionListener
作用:
按钮事件处理
实现接口:
ActionListener
类名:
classScalePane
作用:
显示图像的面板
继承:
Jpanel
2.3异常处理说明
异常处理源码:
try{
mt.waitForAll();
}catch(Exceptionex)
{
ex.printStackTrace();
}
作用:
等待图片加载、输出出错信息
2.4算法
2.4.1扫描图像文件
publicbooleanaccept(Filefile)
{Stringname=file.getName().toLowerCase();//获取文件名
Returnname.endsWith(".gif")||name.endsWith(".jpg")||name.endsWith(".jpeg")||file.isDirectory();}
作用:
判断文件是否可以接受。
2.4.2放大与缩小
放大图像:
if(button==jbZoomIn)
showImagePane.scaleX*=1.25;//图像x轴方向放大图片
showImagePane.scaleY*=1.25;//图像y轴方向放大图片
缩小图像:
if(button==jbZoomOut)
showImagePane.scaleX*=0.8;//图像x轴方向缩小图片
showImagePane.scaleY*=0.8;//图像y轴方向缩小图片
还原图像:
if(button==jbReset)
showImagePane.scaleX=1.0;//图像x轴方向放大图片还原为1.0
showImagePane.scaleY=1.0;//图像y轴方向放大图片还原为1.0
2.4.3过滤图像
if(bufImage==null)
return;
如果bufImage为空则直接返回,也就是列表中不存在文件。
BufferedImagefilteredBufImage=newBufferedImage((int)(image.getWidth(this)*scaleX),(int)(image.getHeight(this)*scaleY),BufferedImage.TYPE_INT_ARGB);
过滤图像,图片的类型颜色定义为整型的ARGB。
2.4.4在面板上画图
if(bufImage!
=null)列表中存在图片。
得出所绘图片的开始坐标:
X=(this.getWidth()-bufImage.getWidth())/2
Y=(this.getHeight()-bufImage.getHeight())/2
开始绘制图片:
Graphics2Dg2=(Graphics2D)g;
g2.drawImage(bufImage,(this.getWidth()-bufImage.getWidth())/2,(this.getHeight()-bufImage.getHeight())/2,this);
2.5程序中所涉及的包
java.awt.geom.*;
提供用于在与二维几何形状相关的对象上定义和执行操作的Java2D类。
java.awt.image.*;
提供创建和修改图像的各种类。
java.awt.color.*;
提供用于颜色空间的类。
2.6源代码
//韩公达制作
//@author韩公达
//图像缩小与放大
importjava.awt.*;
importjava.awt.event.*;
importjava.awt.image.*;
importjava.awt.color.*;
importjava.awt.geom.*;
importjavax.swing.*;
importjava.io.*;
publicclassScaleImageDemoextendsJFrame{
privateJPanelpanel=newJPanel();原按
privateJButtonjbFile=newJButton("打开图像文件");
privateJButtonjbZoomIn=newJButton("放大");
privateJButtonjbZoomOut=newJButton("缩小");
privateJButtonjbReset=newJButton("还原");
ScalePaneshowImagePane=newScalePane();
Containercontent=getContentPane();
//构造方法
publicScaleImageDemo(){
super("图像的缩小与放大");
//为按钮添加动作监听器
jbFile.addActionListener(newButtonActionListener());
jbZoomIn.addActionListener(newButtonActionListener());
jbZoomOut.addActionListener(newButtonActionListener());
jbReset.addActionListener(newButtonActionListener());
//把图像放大按钮、图像缩小按钮、图像还原按钮加入panel面板
panel.add(jbZoomIn);
panel.add(jbZoomOut);
panel.add(jbReset);
//把showImagePane
content.add(showImagePane,BorderLayout.CENTER);
content.add(jbFile,BorderLayout.NORTH);
content.add(panel,BorderLayout.SOUTH);
setSize(360,300);
setVisible(true);
setLocation(400,200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
//使用文件选择器载入图像
publicvoidfileSelect(){
JFileChooserchooser=newJFileChooser();//实例化文件选择器
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);//模式为仅打开文件
chooser.setCurrentDirectory(newFile("."));//设置文件选择器当前目录
//设置图像文件过滤器
chooser.setFileFilter(newjavax.swing.filechooser.FileFilter(){
publicbooleanaccept(Filefile){//可接受的文件类型
Stringname=file.getName().toLowerCase();//获取文件名
returnname.endsWith(".gif")
||name.endsWith(".jpg")
||name.endsWith(".jpeg")
||file.isDirectory();
}
publicStringgetDescription(){
return"图像文件";
}
});
intresult=chooser.showOpenDialog(this);//显示文件选择对话框
if(result==JFileChooser.APPROVE_OPTION){
StringfileName=chooser.getSelectedFile().getAbsolutePath();
showImagePane.loadImage(fileName);//截入图像并显示
}
}
publicstaticvoidmain(String[]args){
newScaleImageDemo();
}
//按钮事件处理类
classButtonActionListenerimplementsActionListener{
publicvoidactionPerformed(ActionEvente){
JButtonbutton=(JButton)e.getSource();
if(button==jbFile){
fileSelect();
}elseif(button==jbZoomIn){
showImagePane.scaleX*=1.25;//图像x轴方向放大因子
showImagePane.scaleY*=1.25;//图像y轴方向放大因子
showImagePane.applyFilter();//过滤图像
showImagePane.repaint();//重绘showImagePane面板
jbReset.setEnabled(true);
}elseif(button==jbZoomOut){
showImagePane.scaleX*=0.8;//图像x轴方向缩小因子
showImagePane.scaleY*=0.8;//图像y轴方向缩小因子
showImagePane.applyFilter();//过滤图像
showImagePane.repaint();//重绘showImagePane面板
jbReset.setEnabled(true);
}elseif(button==jbReset){
showImagePane.scaleX=1.0;//图像x轴方向放大因子还原为1.0
showImagePane.scaleY=1.0;//图像y轴方向放大因子还原为1.0
showImagePane.applyFilter();//过滤图像
showImagePane.repaint();//重绘showImagePane面板
jbReset.setEnabled(false);
}
}
}
//显示图像的面板
classScalePaneextendsJPanel{
Imageimage;
BufferedImagebufImage;//用于显示的缓冲区图像
BufferedImageoriginalBufImage;//原始缓冲区图像
cs2DbufImageG;//缓冲区图像的图形环境
doublescaleX=1.0;//图像水平方向的缩放因子
doublescaleY=1.0;//图像竖直方向的缩放因子
//截入图像
publicvoidloadImage(StringfileName){
image=this.getToolkit().getImage(fileName);//取得图像
MediaTrackermt=newMediaTracker(this);//实例化媒体加载器
mt.addImage(image,0);//增加图像到加载器中
try{
mt.waitForAll();//等待图片加载
}catch(Exceptionex){
ex.printStackTrace();//输出出错信息
}
originalBufImage=newBufferedImage(image.getWidth(this),image.getHeight(this),BufferedImage.TYPE_INT_ARGB);//创建原始缓冲区图像
bufImage=originalBufImage;
bufImageG=bufImage.createGraphics();//创建bufImage的图形环境
bufImageG.drawImage(image,0,0,this);//传输源图像数据到缓冲区图像中
repaint();//重绘组件
}
//过滤图像
publicvoidapplyFilter(){
if(bufImage==null)
return;//如果bufImage为空则直接返回
BufferedImagefilteredBufImage=newBufferedImage((int)(image.getWidth(this)*scaleX),(int)(image.getHeight(this)*scaleY),BufferedImage.TYPE_INT_ARGB);//过滤后的图像
AffineTransformtransform=newAffineTransform();//仿射变换对象
transform.setToScale(scaleX,scaleY);//设置仿射变换的比例因子
AffineTransformOpimageOp=newAffineTransformOp(transform,null);//创建仿射变换操作对象
imageOp.filter(originalBufImage,filteredBufImage);//过滤图像,目标图像在filteredBufImage
bufImage=filteredBufImage;//让用于显示的缓冲区图像指向过滤后的图像
repaint();//重绘组件
}
//重载容器的paintComponent()方法
publicvoidpaint(Graphicsg){
super.paintComponent(g);
if(bufImage!
=null){
Graphics2Dg2=(Graphics2D)g;
g2.drawImage(bufImage,(this.getWidth()-bufImage.getWidth())/2,(this.getHeight()-bufImage.getHeight())/2,this);//绘制图片
}
}
}}
参考文献
[1]《JAVA程序语言设计》马皓清华大学出版社
[2]《JAVA2程序设计实用教程》宋振会陈立电子工业出版社
[3]《JAVA编程思想》(美)BruceEckel侯捷(译)机械工业出版社
[4]《JAVA基础教程》耿祥义清华大学出版社
[5]《JAVA语言学习手册》PatrickNiemeyerJonatbanKmudsen林琪(译)中国电力出版社
致谢
[1]感谢河南理工计算机科学与技术学院陈玮老师,让我懂得了思想的重要性。
[2]感谢以上我所参考书籍的作者和出版社。
[3]感谢软件学院能够给我这个优越的学习环境。