ファイルからのイメージのロードと描画


Graphics クラスのメソッドで,drawImage というものがある.Java言語では,イメージ と呼ばれるビットマップ画像データを扱うためのライブラリも用意されている.

イメージは,

  1. ファイルから読み込む
  2. オフスクリーンイメージ
  3. 指定されたURL(Universal Resource Locator)から読み込む
  4. メモリ上の RGB データ
などの方法で生成することができるが,ここでは1, 4について試して みる.

イメージに対応する型 Image の説明を見ると,

Image クラスは抽象クラスである。イメージはプラットホーム固有の方法 で得られなければならない。

と書いてある.「抽象クラス」というのは,そのサブクラスをいくつか定義し て,そのサブクラスに属するオブジェクトは作られるが,そのクラスだけに属 するオブジェクトは作られないというものである.

しかし,具体的にどのようなサブクラスが存在するかというのは,プラット ホーム(処理系を実行する環境のこと.具体的には機種,OS,ライブラリなど) 固有である.しかし,Imageクラスを使う側はそれらのサブクラスの存在を意 識しなくても良い.

ファイルからイメージを読み込むときには,AWTの実装に固有な動作をさせる ために使う Toolkit というクラスのgetImageというメソッドを呼ぶ.現在の AWT に 対応する Toolkit クラスのオブジェクトはToolkit.getDefaultToolkit() で 得られるので,イメージを得るには, 「Toolkit.getDefaultToolkit().getImage(ファイル名)」のようにする. getImage では JPEG形式と png形式, GIF形式の画像ファイルが読み込み可能である.

のように、ファイルからImageを読んで、ディスプレイに表示する例をみてみよう.
  // 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で PNG 形式のファイルを指定して,
      // イメージを得る.
    image=Toolkit.getDefaultToolkit().getImage("test.png");
    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.pngという PNG 形式の画像ファイル を作る必要がある.教育用計算機センターのシステムでは,gimp, display などのコマンドで png 形式の画像ファイルを作ることができる (PNGの場合は,背景が透明の画像ファイルが作れるので役に立つ).

gimpの使い方は, はいぱー ワークブック「描画システム」にある.


イメージの扱い