イメージの保存は?
続いて、イメージをファイルに保存する方法についても考えてみましょう。これも、ImageIOクラスの機能を利用します。readによる読み込みがわかれば、書き出しもそれほど難しくはありません。
package jp.allabout;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
public class SampleApp extends Frame {
BufferedImage img;
public SampleApp(){
this.setSize(new Dimension(300,200));
this.addWindowListener(new WindowMyAdapter());
try {
img = ImageIO.read(new File("image.jpg"));
Graphics g = img.getGraphics();
g.setColor(new Color(255,0,0,50));
g.fillRect(0,0,img.getWidth(),img.getHeight());
} catch (IOException e) {
e.printStackTrace();
}
}
public void paint(Graphics g){
if (img != null){
g.drawImage(img,0,0,this );
}
}
public static void main(String[] args) {
new SampleApp().setVisible(true);
}
class WindowMyAdapter extends WindowAdapter {
public void windowClosing(WindowEvent ev) {
try {
ImageIO.write(img, "jpeg", new File("image2.jpg"));
} catch (IOException e) {
e.printStackTrace();
}
System.exit(0);
}
}
}
これは、起動時にimage.jpgを読み込み、これに赤い色を全体的に重ねて、プログラム終了時にimage2.jpgというファイル名で保存をします。
読み込んだイメージファイルにアンバーをかけて、終了時に保存する。 |
イメージ保存の流れ
では、イメージ処理の流れを整理していきましょう。ここでは、イメージを読み込んだ段階で、イメージ全体に赤い色を重ねています。この部分ですね。
img = ImageIO.read(new File("image.jpg"));
Graphics g = img.getGraphics();
g.setColor(new Color(255,0,0,50));
g.fillRect(0,0,img.getWidth(),img.getHeight());
イメージファイルから読み込んで作成されたBufferedImageに描画を行うには、このインスタンスからGraphicsを取得する必要があります。それが「getGraphics」です。これでGraphicsを取得し、後はpaintでやっていたのと同様にメソッドを呼び出して描画をします。
ImageIO.write(img, "jpeg", new File("image2.jpg"));
BufferedImageインスタンスのビットマップイメージをファイルに保存するには、ImageIOの「write」というメソッドを用います。これは、以下のようにして引数を指定します。
第1引数――保存するImageインスタンス
第2引数――保存するファイルのフォーマット
第3引数――保存先のファイルを示すFileインスタンス
これで、指定したファイルにBufferedImageのビットマップイメージが保存されます。writeも例外を発生させるので、try内で実行するのが基本です。
このImageIOの基本的な使い方がわかっていると、イメージファイルに簡単にアクセスできるようになります。Toolkitを使ったやり方よりも、今はImageIOを利用したほうが簡単でわかりやすいかも知れませんね。