Javaで画像処理プログラミングをするにあたって、画像ファイルの取り扱い(入出力について述べる)
Javaでは画像ファイルを取り扱う場合ImageIOクラス(javax.imegeio.ImageIO)を利用する。
そのため以下の様にimport文でインポートをする。
標準でサポートするファイルフォーマットはJPEG,PNG,BMP,WBMP,GIFとなっている。
import java.imageio.ImageIO;
画像ファイルの読み込みはImageIO.read()メソッドを使う。最も簡単な使い方はFileクラスを
用いた方法で書式は
public static BufferedImage read(File input)throws IOException
となっている。
例えば画像ファイル"lena.png"を読み込む場合以下の様に書く
BufferedImage image;
try {
image=ImageIO.read(new File("lena.png"));
} catch (IOException e) {
e.printStackTrace();
}
あるいは単に
Buffered Image image=ImageIO.read(new File("lena.png"));
と書く。2つ目の場合は throws IOException指定する必要がある。
画像ファイルの書き出しはImageIO.read()メソッドを使う。最も簡単な使い方はFileクラスを
用いた方法で書式は
public static boolean write(RenderedImage im,
String formatName,
File output)
throws IOException
となっている。
例えば画像ファイル"out.png"を書き出す場合以下の様に書く
try {
ImageIO.write(image, "png", new File("out.png"));
} catch (IOException e) {
e.printStackTrace();
}
あるいは単に
ImageIO.write(image, "png", new File("out.png"));
と書く。2つ目の場合は throws IOException指定する必要がある。
すでに同じ名前のファイルが存在する場合、その内容は上書きされるので注意が必要。
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class ImageProcessing{
JFrame frame;//メインウィンドウ
JPanel panel;
BufferedImage image;//バッファ領域(ダブルバッファリング用)
Graphics fg;//描画領域用描画オブジェクト(グラフィックスコンテキスト)
Graphics bg;//ダブルバッファリング用描画オブジェクト(グラフィックスコンテキスト)
int screenW;//ウィンドウの幅
int screenH;//ウィンドウの高さ
double[][] work=new double[256][256];
public void init() {
//画面サイズの設定
screenW=256;
screenH=256;
//フレームの設定
frame=new JFrame();
frame.setTitle("Image processing");
frame.setSize(screenW,screenH);
//frame.setResizable(false);//ウィンドウサイズを変更不可に設定
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container cont=frame.getContentPane();
cont.setLayout(new FlowLayout(FlowLayout.CENTER,0,0));
panel=new JPanel();
//panel.addMouseListener(this);
panel.setPreferredSize(new Dimension(screenW,screenH));
cont.add(panel);
frame.pack();
frame.setVisible(true);
//描画領域のサイズ調整
panel.setPreferredSize(new Dimension(screenW,screenH));
frame.pack();
//フレームに描画する準備
image=(BufferedImage)panel.createImage(screenW, screenH);
fg=panel.getGraphics();
bg=image.getGraphics();
}
public void display() {
//バッファ領域のイメージを描画領域へ転送
fg.drawImage(image, 0, 0, panel);
}
public ImageProcessing(){
init();
try {
image=ImageIO.read(new File("lena.png"));
} catch (IOException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
display();
JOptionPane.showMessageDialog(null,"画像の読み込みました");
try {
ImageIO.write(image, "png", new File("out.png"));
} catch (IOException e) {
e.printStackTrace();
}
JOptionPane.showMessageDialog(null,"画像を書き出しました");
while(true) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
display();
}
}
public static void main(String[] args){
new ImageProcessing();
}
}