BufferedImageの画像をZoom in、Zoom Outする。
ここでは、ボタンを押してBufferedImageの画像をZoom inまたはZoom Outするプログラムを書く。
まずは、コードを下記に記す。
import java.awt.BorderLayout; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; public class ZoomImage extends JFrame implements ActionListener { BufferedImage img; JFrame showFrame; MyPanel mypane; double x; //倍率 int h; //画像の高さ int w; //画像の幅 int ch; //倍率補正した画像の高さ int cw; //倍率補正した画像の幅 //画像を表示する public void OpenImage () { try { img = ImageIO.read(new File("開く画像")); h = img.getHeight(); //画像の高さを取得 w = img.getWidth(); //画像の幅を取得 x = 1.0; //倍率を1にする ch = (int) (h*x); cw = (int) (w*x); showFrame = new JFrame("Change Size"); showFrame.setSize (cw, ch); showFrame.setLocationRelativeTo(null); showFrame.setVisible(true); mypane = new MyPanel (cw, ch); showFrame.getContentPane().add(mypane, BorderLayout.CENTER); } catch (IOException ex) { System.out.println("Miss"); } } //画像を描画するツール public class MyPanel extends JPanel { public MyPanel (int w, int h) { setSize(w,h); } public void paintComponent (Graphics g) { g.drawImage(img, 0, 0, cw, ch, this); } } //ボタンが押された時のイベント public void actionPerformed (ActionEvent e) { String cmd = e.getActionCommand(); if (cmd.equals("open")) { //Openボタンが押された時 OpenImage (); } else if (cmd.equals("in")) { //Zoom inボタンが押された時 x = x*1.25; //1.25倍ずつZoom inする ch = (int) (h*x); cw = (int) (w*x); showFrame.setSize (cw, ch); showFrame.repaint(); } else if (cmd.equals("out")) { //Zoom Outボタンが押された時 x = x*0.8; //0.8倍ずつZoom Outする ch = (int) (h*x); cw = (int) (w*x); showFrame.setSize (cw, ch); showFrame.repaint(); } } ZoomImage () { JButton button = new JButton ("Open"); JButton InB = new JButton ("Zoom In"); JButton OutB = new JButton("Zoom Out"); button.addActionListener (this); InB.addActionListener(this); OutB.addActionListener(this); button.setActionCommand("open"); InB.setActionCommand("in"); OutB.setActionCommand("out"); button.setBounds(50, 10, 90, 30); InB.setBounds(50, 50, 90, 30); OutB.setBounds(50, 90, 90, 30); JPanel pane = new JPanel(); pane.setLayout(null); pane.add(button); pane.add(InB); pane.add(OutB); getContentPane().add(pane, BorderLayout.CENTER); } public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ ZoomImage frame = new ZoomImage(); frame.setTitle("Zoom"); frame.setBounds (10, 10, 200, 170); frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }
このプログラムの主要な部分は下記である。
g.drawImage(img, 0, 0, cw, ch, this);
drawImageの三番目と四番目の要素が画像サイズを指定している。今回のプログラミングでは、これらの値を変えることで“Zoom In”、“Zoom Out”を行った。画像の書き換えは"repaint()" を使用した。
このコードで、開いた画像を1.25倍ずつZoom Inし、0.8倍ずつZoom Outできるはず。