イメージは,
イメージに対応する型 Image の説明を見ると,
Image クラスは抽象クラスである。イメージはプラットホーム固有の方法 で得られなければならない。
と書いてある.「抽象クラス」というのは,そのサブクラスをいくつか定義し て,そのサブクラスに属するオブジェクトは作られるが,そのクラスだけに属 するオブジェクトは作られないというものである.
しかし,具体的にどのようなサブクラスが存在するかというのは,プラット ホーム(処理系を実行する環境のこと.具体的には機種,OS,ライブラリなど) 固有である.しかし,Imageクラスを使う側はそれらのサブクラスの存在を意 識しなくても良い.
ファイルからイメージを読み込むときには,AWTの実装に固有な動作をさせる ために使う Toolkit というクラスのgetImageというメソッドを呼ぶ.現在の AWT に 対応する Toolkit クラスのオブジェクトはToolkit.getDefaultToolkit() で 得られるので,イメージを得るには, 「Toolkit.getDefaultToolkit().getImage(ファイル名)」のようにする. getImage では JPEG形式と gif形式の画像ファイルが読み込み可能である.
例をみてみよう.
// AWT を使うので,java.awt.* を import する. import java.awt.*; // イベント処理をおこなうので, import java.awt.event.*; // 独立したウィンドウを作るので,DrawImageは Frameのサブクラスとして定義 class DrawImage extends Frame implements KeyListener{ // イメージを表す Image クラスの変数 image の宣言 Image image; // DrawImageクラスのコンストラクタ public DrawImage(){ // 親クラスである Frameクラスのコンストラクタを // タイトル文字列を "DrawImage"として呼ぶ. super("DrawImage"); // 現在の Toolkit を得て,getImageで GIF 形式のファイルを指定して, // イメージを得る. image=Toolkit.getDefaultToolkit().getImage("test.gif"); addKeyListener(this); } public static void main(String [] args){ // DrawImageクラスのインスタンスを作る. DrawImage frame=new DrawImage(); // ウィンドウのサイズを300 x 300 に指定する. frame.setSize(300,300); // ウィンドウを表示する. frame.setVisible(true); } public void paint(Graphics g){ // イメージ image を (100,100)を左上にして表示する. g.drawImage(image,100,100,this); // イメージ image を (100,150)を左上にして,幅80高さ80で表示する. g.drawImage(image,100,150,80,80,this); } // キーを押した際に発生するイベントを以下のメソッドで捕まえる. public void keyPressed(KeyEvent e){ int key=e.getKeyChar(); // 入力したキーのコードが「q」だった時は終了するl if(key=='q') System.exit(0); } public void keyReleased(KeyEvent e){} public void keyTyped(KeyEvent e){} }Graphicsクラス のメソッド drawImage には,メソッドpaint中の2つめの 呼び出しのように,もとのイメージを拡大縮小して,表示させる機能もある.
上のプログラムを動かすためには,test.gifという gif 形式の画像ファイル を作る必要がある.教育用計算機センターのシステムでは,gimp, xpaint, xv, display などのコマンドで gif 形式の画像ファイルを作ることができる (gifの場合は,背景が透明の画像ファイルが作れるので役に立つ).
gimpの使い方は, はいぱー ワークブック「描画システム」にある.gifファイルを作成する場合に注 意することは,画像の上で,右ボタン を押して Image -> Indexed を指定し ておかないと,ファイルの保存ができない点である.