您的位置:首页 > 其它

16. 26. 3. 装入想要尺寸的图片 Load Image and scale it

2011-10-07 12:11 465 查看


import javax.swing.JFrame;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.Image;
import javax.swing.JButton;
import javax.swing.JPanel;
import java.awt.Graphics;
import java.awt.BorderLayout;
import javax.swing.JFileChooser;
import java.io.File;
import javax.swing.filechooser.FileFilter;
import java.awt.Toolkit;

/**
*目的:打开一个图片,并且缩放它
*习惯了eclipse,今天用EditPlus搞一把,结果....
*结果感觉挺好,就是有点累,什么都得自己动手来,比如解个扣....
*/
public class ImageFileFilterImageScale extends JFrame implements ActionListener{
Image img;//一张图片,什么图片,看下面怎么定它的?
JButton getPictureButton = new JButton("获得图片");

public ImageFileFilterImageScale(){
this.setSize(300,300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//定义一个装图片的面板
JPanel picPanel = new PicturePanel();//怎么装?看下面它的paint画方法吧
this.add(picPanel,BorderLayout.CENTER);

JPanel buttonPanel = new JPanel();
getPictureButton.addActionListener(this);
buttonPanel.add(getPictureButton);
this.add(buttonPanel,BorderLayout.SOUTH);
this.setVisible(true);
}

class PicturePanel extends JPanel{
public void paint(Graphics g){//原来你是这么画的啊!
g.drawImage(img,0,0,this);
}
}

public void actionPerformed(ActionEvent e){
String file = getImageFile();//这里又调用了一个方法,看下面
if(file != null){//这是前提,不能不选择吧
//Toolkit:工具包,俺的理解,它是一个百宝箱,能做的事儿太多啦!
Toolkit kit = Toolkit.getDefaultToolkit();
img = kit.getImage(file);//从百宝箱里拿一幅画给你

/**getScaleInstance()是指返回图像的缩放版本。
*宽300,俺理解,-1是高吗?答案是:
*如果 width 或 height 为负数,则替换该值以维持初始图像尺寸的高宽比。
*如果 width 和 height 都为负,则使用初始图像尺寸。
*scale_smooth 选择图像平滑度比缩放速度具有更高优先级的图像缩放算法。
*/
img = img.getScaledInstance(300,-1,Image.SCALE_SMOOTH);
this.repaint();
}
}

private String getImageFile(){
JFileChooser fc = new JFileChooser();//新建一个文件选择器
fc.setFileFilter(new ImageFilter());//设置过滤类型,看下面重写的格式
int result = fc.showOpenDialog(null);
File file = null;//先设置这个文件为空
if(result == JFileChooser.APPROVE_OPTION){
file = fc.getSelectedFile();//你选择什么,我的file就是什么
return file.getPath();
}else{
return null;
}
}

public static void main(String[] args) {
new ImageFileFilterImageScale();
}
}

class ImageFilter extends FileFilter{////重写了ImageFilter(),我们要过滤什么格式的文件
public boolean accept(File f){
if(f.isDirectory()){//是目录,返回true
return true;
}
String name = f.getName();
if(name.matches(".*((.jpg)|(.gif)|(.png))")){
return true;
}else{
return false;
}
}

public String getDescription(){
return "图片格式(*.jpg,*.gif,*.png)";
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: