Java圖像查看器

jopen 9年前發布 | 5K 次閱讀 Java

MyCanvas.java

package PictureViewer;

import java.awt.; import java.awt.event.; import java.awt.image.*; public class MyCanvas extends Canvas implements ComponentListener{ private BufferedImage bi; private Image im; private int image_width; private int image_height; public void setImage(BufferedImage bi){ this.bi = bi; this.zoom(); } public void paint(Graphics g){ g.drawImage(im,(this.getWidth()-image_width)/2,(this.getHeight()-image_height)/2,this); } public void componentResized(ComponentEvent e){ if(bi != null){ System.out.println("resize!!");

        this.zoom();
        this.repaint();
    }
}   
public void componentMoved(ComponentEvent e){}
public void componentShown(ComponentEvent e){}
public void componentHidden(ComponentEvent e){}
public void zoom(){
    if(bi == null)
        return;
    int screen_width = this.getWidth();
    int screen_height = this.getHeight();
    double screen_proportion = 1.0 * screen_height / screen_width;  
    System.out.println("screen: w "+screen_width+" ,h "+screen_height+" ,p0 "+screen_proportion);

    image_width = bi.getWidth(this);
    image_height = bi.getHeight(this);
    double image_proportion = 1.0 * image_height / image_width;
    System.out.println("image: w "+image_width+" ,h "+image_height+" ,p1 "+image_proportion);

    if(image_proportion > screen_proportion){
        image_height = screen_height;
        image_width = (int)(image_height / image_proportion);   
        System.out.println("  p1>p0  w= "+image_width);
    }else{
        image_width = screen_width;
        image_height = (int)(image_width * image_proportion);   
        System.out.println("  p0>p1  h= "+image_height);
    }
    im = bi.getScaledInstance(image_width,image_height,Image.SCALE_SMOOTH);
}

} </pre>

MyFilter.java

package PictureViewer;

import java.io.File; import java.io.FilenameFilter;

public class MyFilter implements FilenameFilter{ private String[] extension;
public MyFilter(){ extension = new String[]{".jpg", ".JPG", ".gif", ".GIF", ".png", ".PNG", ".jpeg", ".JPEG"}; } public MyFilter(String[] extension){ this.extension = extension; } public boolean accept(File dir,String name){ for(String s : extension){ if(name.endsWith(s)){ return true;
} }
return false; }
}</pre>

PictureViewer.java

package PictureViewer;

import java.awt.; import java.awt.event.; import java.awt.image.; import java.io.; import javax.imageio.*;

public class PictureViewer implements ActionListener{ private Frame frame; private MyCanvas mc ; private String fpath; private String fname; private File[] files; private int findex ; private FileDialog fd_load; private MyFilter filter; private Button previous ; private Button next ; public static void main( String args[]) throws Exception { new PictureViewer().init(); } public void init(){ frame = new Frame("PictureViewer"); Panel pb = new Panel(); Button select = new Button("選擇圖片"); previous = new Button("上一張"); next = new Button("下一張"); select.addActionListener(this); previous.addActionListener(this); next.addActionListener(this); pb.add(select); pb.add(previous); pb.add(next); mc = new MyCanvas(); mc.setBackground(new Color(200,210,230)); mc.addComponentListener(mc); frame.add(pb,"North"); frame.add(mc,"Center"); frame.setSize(360,360); frame.setLocation(400,200); frame.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); }
});
frame.setVisible(true); this.validateButton(); filter = new MyFilter(); fd_load = new FileDialog(frame,"打開文件",FileDialog.LOAD); fd_load.setFilenameFilter(filter); }

public void actionPerformed(ActionEvent e){
    String command = e.getActionCommand();
    if(command.equals("選擇圖片")){
        fd_load.setVisible(true);
        fpath = fd_load.getDirectory();
        fname = fd_load.getFile();
        if((fpath != null) && (fname != null)){
            this.display(new File(fpath + fname));  
            files = new File(fpath).listFiles(filter);
            this.setIndex();
        }           
    }else if(command.equals("上一張")){
        findex--;
        if(findex<0)
            findex = 0;
        this.display(files[findex]);
    }else if(command.equals("下一張")){
        findex++;
        if(findex >= files.length)
            findex = files.length-1;
        this.display(files[findex]);
    }
    this.validateButton();
}   
public void display(File f){
    try{
        BufferedImage bi = ImageIO.read(f);
        mc.setImage(bi);
        frame.setTitle("PictureViewer - [" +  f.getName() + "]");
    }catch(Exception e){
        e.printStackTrace();    
    }
    mc.repaint();
}
public void setIndex(){
    File current = new File(fpath + fname); 
    if(files != null){
        for(int i=0;i<files.length;i++){
            if(current.equals(files[i])){
                findex = i; 
            }   
        }           
    }
}
public void validateButton(){
    previous.setEnabled((files!=null) && (findex > 0));
    next.setEnabled((files!=null) && (findex<(files.length-1))); 
}

}</pre>

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!