今回は、僕の卒業研究のテーマの予定の画像計測関係についてです。 画像を描画する際にそのまま画面に表示する事もできますが、 アニメーションでない場合は、別にそのまま描画しても何ともないのですが、 アニメーションにすると、描画した時にちらつきが出てしまいます。 それを防ぐためにまず、オフスクリーンに描画しておき後で一気に画面に表示する といった方法を用いると解消されます。 それをするためにJavaでは、Imageクラスと言うものが用意されています。 ここでは、Imageクラスを用いたプログラムを作ってみましょう。
※ちょっと、長くなってきたので、行番号はつけません。
import java.awt.*;
import java.awt.event.*;
import java.awt.Image.*;
class gframe extends Frame implements ActionListener
{
TextField infilename; //ファイル名を入力するフィールド
Button button;
Image image; //オフスクリーンで使うためのimageクラス
Graphics graphics; //オフスクリーンに描画するためのgraphicsクラス
String filename; //テキストフィールドからの文字列の取得
boolean buttonpush = false; //ボタンが押されたかどうかの判定
gframe()
{
setLayout(new FlowLayout(FlowLayout.LEFT)); //レイアウトの設定
infilename = new TextField(20);
add(infilename);
button = new Button("ファイル決定");
add(button);
button.addActionListener(this);
}
public void paint(Graphics g)
{
if(image == null) image = createImage(400,400); //オフスクリーンの描画領域の確保
if(graphics == null) graphics = image.getGraphics(); //グラフィックスコンテキストの取得
if(buttonpush == true){
image = Toolkit.getDefaultToolkit().getImage(filename); //オフスクリーンに画像ファイルを読み込む
g.drawImage(image,0,50,this); //実際に画面に表示
buttonpush = false;
}
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource() == button){
buttonpush = true;
filename = infilename.getText();
repaint();
}
}
}
public class TImage
{
public static void main(String[] args)
{
gframe f = new gframe();
f.setSize(400,450);
f.setTitle("Imageクラスの例");
f.addWindowListener(new WindowAdapter(){public void
windowClosing(WindowEvent e){System.exit(0);}});
f.setVisible(true);
}
}
これは、オフスクリーンに画像ファイルを読み込み表示するプログラムです。 テキストフィールドにファイル名を入力し、ボタンを押すと画像が表示されるはずです。 こういう風に画像を読み込み処理をするためのプログラムをこの後説明しようと思います。