イメージを取り扱うためには awtパッケージの Imageクラスを利用します。
イメージの取り扱いはシステムの実装に大きく依存します。
そのため Imageクラスは abstractクラスで、通常のアプレットのプログラムの
中で、コンストラクタを用いたオブジェクトの生成は行えません。
Imageクラスのオブジェクトを得るためには、
Appletクラスに用意された専用のメソッドを用いることになります。最も重要なメソッドが getImage()です。 このメソッドは、引数に指定された URLをデータの読み込み先として、 イメージのオブジェクトを生成します。 引数の指定には複数の方法が可能です。 次のサンプルのように、「データの URLをそのまま指定」することもできます。 また、 「データの置かれているディレクトリの URL」と「Stringクラスのパス名」という 2つの引数を与える方法も便利です。
URL url1, url2; String filename;
Image image1 = getImage( url1 );
Image image2 = getImage( url2, filename );
ディレクトリのURLは、
HTMLのドキュメントのある場所から相対的に指定できると便利です。
その目的のために、Appletクラスはメソッド getDocumentBase()
および getCodeBase()も用意されています。
getDocumentBase() は HTMLファイルの存在するディレクトリの URL を、
getCodeBase()はアプレットのバイトコードが置かれている URLを返します。
たとえば、HTMLファイルからパラメータによって
パス名が指定できるようにした場合には
getDocumentBase() を用いて、
HTMLファイルの存在するディレクトリを出発点にするといいでしょう。
これに対して、指定がない場合のためのデフォルトのデータの指定には、
getCodeBase() を用いて、
アプレットのプログラムから見た相対指定でデータにアクセスできるように
するのが望ましいでしょう。
String source = getParameter("source"); // パラメータからソース名
if( source != null )
Image image = getImage( getDocumentBase(), source );
else
Image image = getImage( getCodeBase(), "default.gif" );
イメージの表示を行うには、
Graphicsクラスのメソッド drawImage() を利用します。
最初の引数は表示したい Imageのオブジェクト、
続く2つの引数はイメージのアプレット内の座標です。
Graphics g; Image image;
g.drawImage( image, 0, 0, this );
イメージのサイズを調べるためのメソッド getWidth(),getHeight() を使います。
これらは Imageクラスのメソッドです。
また、drawImage()メソッドの第4、5引数に int型の数値を与えると、
それらは表示されるイメージのサイズと解釈されます。
(イメージは「切り取られる」のではなく、自動的に伸縮します。)
たとえば次の例は、イメージを縦横に2倍に拡大して表示します。
Graphics g; Image image;
int w = image.getWidth( this );
int h = image.getHeight( this );
g.drawImage( image, 0, 0, w*2, h*2, this );
ところで、getWidth(),getHeight(),drawImage()の各メソッドで
引数に指定している this は何を意味しているのでしょうか?
this は特別なキーワードで、そのクラス自身を表します。
つまりイメージを呼び出したアプレット自身です。
this が引数で渡される理由は、
イメージの読み込み処理が独立したスレッドによって
処理されること関係があります。
イメージの読み込みとイメージの表示の処理がうまく同期をとるため、
Appletクラスにはイメージからのメッセージを受け取る ImageObserver という機能が
実装されています。
イメージのデータがある程度読み込まれるたびに、
アプレットはその通知を受け取り、
再表示の処理を自動的に呼び出せる仕組みになっています。
(アプレットの使用するイメージが、
処理を行いながら少しずつ表示されるのは、この機構のおかげです。)