drawImageメソッドで画像表示

広告

画像ファイルを読み込んでImageクラスのオブジェクトを作成したら、実際にアプレット上で表示させて見ます。GraphicsクラスのdrawImageメソッドを使います。

指定されたイメージの現在利用可能な部分を描きます。イメージは、このグラ
フィックスコンテキストの座標空間の (x, y) にその左上隅を合わせて描かれま
す。イメージ内の透明ピクセルは、そこにすでに存在するどのようなピクセルに
も影響しません。

完全なイメージがロード済みでなく、現在の出力デバイスに対してディザリング
済みおよび変換済みでなくても、このメソッドはすべての場合にただちに復帰し
ます。

イメージが完全にロードされ、ピクセルが変更されなくなった場合、drawImage 
は true を返します。イメージが完全にロードされていない場合、drawImage は
false を返し、イメージのさらに多くの部分が利用可能になるか、アニメーショ
ンの別のフレームに描画され、イメージをロードするプロセスにより指定のイメー
ジオブザーバに通知されます。

パラメータ:
  img - 描画される指定イメージ。img が null の場合には何も行わない
  x - x 座標
  y - y 座標
  observer - イメージがさらに変換されることが通知されるオブジェクト 
戻り値:
  イメージピクセルがまだ変更中の場合は false、そうでない場合は true

引数に指定したImageクラスのオブジェクトを、画像の左上が引数に指定した(x, y)の位置になるように表示します。4番目の引数は取りあえず気にしないで下さい。ImageObserverインターフェースを実装しているオブジェクトを指定するのですが、Appletクラスがそうなので値としては「this」を指定しておけば結構です。

このメソッドは、表示しようとするImageオブジェクトが完全に画像を読み取った状態でない場合に実行されても、その時点での画像イメージを表示して次の処理に移ります。ただ処理は次へ移りますが、画像の読み込みが進むについて自動的に読み取った分を表示してくれます。

実際に使う場合には下記のような感じで使われます。

public class ImageTest extends Applet{
  Image img;

  public void init(){
    img = getImage(getCodeBase(), "../img/gazou.jpg");
  }

  public void paint(Graphics g){
    g.drawImage(img, 10, 10, this);
  }
}

サンプルプログラム

では実際に試してみましょう。

ImageTest2.java

import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Image;

/*
<applet code="ImageTest2.class" codebase="class" width="150" height="150">
</applet>
*/

public class ImageTest2 extends Applet{
  Image img;

  public void init(){
    img = getImage(getCodeBase(), "../img/reo1s.gif");
  }

  public void paint(Graphics g){
    g.drawImage(img, 10, 10, this);
  }
}

実際にブラウザで見てみると下記のようになります。

※今回使わせて頂いた画像は『牛飼いとアイコンの部屋』の画像を使わせて頂いています。

下記で実際に試す事が出来ます。

ImageTest2.html

( Written by Tatsuo Ikura )