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

 

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)";
	}
}


 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值