JAVA图片浏览器
论文
政研论文下载论文大学下载论文大学下载关于长拳的论文浙大论文封面下载
[1]
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
JAVA语言课程设计
1 设计要求
1.1 程序要求
本程序是一个图形用户界面程序,可一对图像文件进行放大与缩小,刚载入
的文件显示原始尺寸,图像的内设格式是.jif、.jpg、.jpeg。 1.2 运行效果
1.2.1主界面
图 1-1主界面
1
JAVA语言课程设计 1.2.2打开文件选择对话框
图 1-2打开文件选择对话框 1.2.3载入文件
图 1-3载入文件
2
JAVA语言课程设计 1.2.4放大图片
图 1-4放大图片 1.2.4缩小图片
图 1-5缩小图片 2 程序整体设计说明 2.1程序中所使用的类
类名:public class ScaleImageDemo
作用:主类
继承的父类:JFrame
3
JAVA语言课程设计
类名:class ButtonActionListener
作用:按钮事件处理
实现接口:ActionListener
类名:class ScalePaner 作用:显示图像的面板
继承的父类:Jpanel
2.2.主要成员方法
public ScaleImageDemo() 构造方法
public void fileSelect() 图像文件选择器
public static void main(String[] args) 驱动
public void actionPerformed(ActionEvent e) 按钮事件处理 public void loadImage(String fileName) 载入图像 public void paint(Graphics g) 重载容器的paintComponent()方法 2.3内部类
类名:class ButtonActionListener
作用:按钮事件处理
实现接口:ActionListener
类名:class ScalePane
作用:显示图像的面板
继承:Jpanel
2.3异常处理说明
异常处理源码:
try {
mt.waitForAll();
} catch (Exception ex)
{
ex.printStackTrace(); }
作用:等待图片加载、输出出错信息
4
JAVA语言课程设计
2.4算法
2.4.1扫描图像文件
public boolean accept(File file) {String name = file.getName().toLowerCase(); //获取文件名 Return name.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为空则直接返回,也就是列表中不存在文件。
BufferedImage filteredBufImage =new BufferedImage((int) (image.getWidth(this) *
5
JAVA语言课程设计
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
开始绘制图片:
Graphics2D g2 = (Graphics2D) g; g2.drawImage(bufImage,(this.getWidth() - bufImage.getWidth()) / 2,(this.getHeight()
- bufImage.getHeight()) / 2,this); 2.5程序中所涉及的包
java.awt.geom.*;
提供用于在与二维几何形状相关的对象上定义和执行操作的 Java 2D 类。
java.awt.image.*;
提供创建和修改图像的各种类。
java.awt.color.*;
提供用于颜色空间的类。
2.6源代码
//韩公达制作
//@author 韩公达
// 图像缩小与放大
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
6
JAVA语言课程设计
import java.awt.color.*;
import java.awt.geom.*;
import javax.swing.*;
import java.io.*;
public class ScaleImageDemo extends JFrame {
private JPanel panel = new JPanel();原按
private JButton jbFile = new JButton("打开图像文件");
private JButton jbZoomIn = new JButton("放大");
private JButton jbZoomOut = new JButton("缩小");
private JButton jbReset = new JButton("还原");
ScalePane showImagePane = new ScalePane();
Container content = getContentPane();
//构造方法
public ScaleImageDemo() {
super("图像的缩小与放大");
//为按钮添加动作监听器
jbFile.addActionListener(new ButtonActionListener());
jbZoomIn.addActionListener(new ButtonActionListener());
jbZoomOut.addActionListener(new ButtonActionListener());
jbReset.addActionListener(new ButtonActionListener());
//把图像放大按钮、图像缩小按钮、图像还原按钮加入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);
7
JAVA语言课程设计
setSize(360, 300);
setVisible(true);
setLocation(400,200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
//使用文件选择器载入图像
public void fileSelect() {
JFileChooser chooser = new JFileChooser(); //实例化文件选择器 chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);//模式为仅打开文件
chooser.setCurrentDirectory(new File(".")); //设置文件选择器当前目录 //设置图像文件过滤器
chooser.setFileFilter(new javax.swing.filechooser.FileFilter() {
public boolean accept(File file) { //可接受的文件类型
String name = file.getName().toLowerCase(); //获取文件名
return name.endsWith(".gif")
|| name.endsWith(".jpg")
|| name.endsWith(".jpeg")
|| file.isDirectory();
}
public String getDescription() {
return "图像文件";
}
});
int result = chooser.showOpenDialog(this); //显示文件选择对话框 if (result == JFileChooser.APPROVE_OPTION) {
String fileName = chooser.getSelectedFile().getAbsolutePath();
showImagePane.loadImage(fileName); //截入图像并显示
}
8
JAVA语言课程设计
}
public static void main(String[] args) { new ScaleImageDemo();
}
//按钮事件处理类
class ButtonActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
JButton button = (JButton)e.getSource(); if(button==jbFile) {
fileSelect();
} else if(button==jbZoomIn) {
showImagePane.scaleX *= 1.25; //图像x轴方向放大因子
showImagePane.scaleY *= 1.25; //图像y轴方向放大因子
showImagePane.applyFilter(); //过滤图像
showImagePane.repaint(); //重绘showImagePane面板
jbReset.setEnabled(true);
} else if(button==jbZoomOut) {
showImagePane.scaleX *= 0.8; //图像x轴方向缩小因子
showImagePane.scaleY *= 0.8; //图像y轴方向缩小因子
showImagePane.applyFilter(); //过滤图像
showImagePane.repaint(); //重绘showImagePane面板
jbReset.setEnabled(true);
} else if(button==jbReset) {
showImagePane.scaleX = 1.0; //图像x轴方向放大因子还原为1.0
showImagePane.scaleY = 1.0; //图像y轴方向放大因子还原为1.0
showImagePane.applyFilter(); //过滤图像
showImagePane.repaint(); //重绘showImagePane面板
jbReset.setEnabled(false);
}
}
9
JAVA语言课程设计
}
//显示图像的面板
class ScalePane extends JPanel { Image image;
BufferedImage bufImage; //用于显示的缓冲区图像
BufferedImage originalBufImage; //原始缓冲区图像
cs2D bufImageG; //缓冲区图像的图形环境
double scaleX = 1.0; //图像水平方向的缩放因子
double scaleY = 1.0; //图像竖直方向的缩放因子
//截入图像
public void loadImage(String fileName) {
image = this.getToolkit().getImage(fileName); //取得图像
MediaTracker mt = new MediaTracker(this); //实例化媒体加载器
mt.addImage(image, 0); //增加图像到加载器中
try {
mt.waitForAll(); //等待图片加载
} catch (Exception ex) {
ex.printStackTrace(); //输出出错信息
}
originalBufImage = new BufferedImage(image.getWidth(this),image.getHeight(this),BufferedImage.T
YPE_INT_ARGB); //创建原始缓冲区图像
bufImage = originalBufImage;
bufImageG = bufImage.createGraphics(); //创建bufImage的图形环境
bufImageG.drawImage(image, 0, 0, this); //传输源图像数据到缓冲区图像中
repaint(); //重绘组件
}
//过滤图像
public void applyFilter() {
10
JAVA语言课程设计
if (bufImage == null)
return; //如果bufImage为空则直接返回
BufferedImage filteredBufImage =new BufferedImage((int)
(image.getWidth(this) * scaleX),(int) (image.getHeight(this) *
scaleY),BufferedImage.TYPE_INT_ARGB); //过滤后的图像
AffineTransform transform = new AffineTransform(); //仿射变换对象
transform.setToScale(scaleX, scaleY); //设置仿射变换的比例因子
AffineTransformOp imageOp = new AffineTransformOp(transform,
null);//创建仿射变换操作对象
imageOp.filter(originalBufImage, filteredBufImage);//过滤图像,目标图像在filteredBufImage
bufImage = filteredBufImage; //让用于显示的缓冲区图像指向过滤后的图像
repaint(); //重绘组件
}
//重载容器的paintComponent()方法
public void paint(Graphics g) {
super.paintComponent(g);
if (bufImage != null) {
Graphics2D g2 = (Graphics2D) g;
g2.drawImage(bufImage,(this.getWidth() - bufImage.getWidth()) /
2,(this.getHeight() - bufImage.getHeight()) / 2,this); //绘制图片
}
}
}}
11
JAVA语言课程设计
参考文献
[1]《JAVA程序语言设计》马皓 清华大学出版社
JAVA2 程序设计实用教程》宋振会 陈立 电子工业出版社 [2]《
[3]《JAVA 编程思想》(美)Bruce Eckel 侯捷(译)机械工业出版社 [4]《JAVA 基础教程》耿祥义 清华大学出版社
[5]《JAVA 语言学习手册》Patrick Niemeyer Jonatban Kmudsen 林琪(译)中国电力出版社
12
JAVA语言课程设计
致谢 [1]感谢河南理工计算机科学与技术学院陈玮老师,让我懂得了思想的重要性。 [2]感谢以上我所参考
书
关于书的成语关于读书的排比句社区图书漂流公约怎么写关于读书的小报汉书pdf
籍的作者和出版社。
[3]感谢软件学院能够给我这个优越的学习环境。
13