指定の領域内に画像表示

広告

前のページで使用したdrawImageでは画像の大きさを変更せずに表示しましたが、読み込んだ元の画像の大きさとは関係無く指定した大きさに拡大縮小して表示させることも出来ます。メソッド名は同じdrawImageですが、引数が異なっています。

指定された矩形の内部に収まるようにスケーリングして、指定されたイメージの
利用可能な部分を描きます。

イメージは、このグラフィックスコンテキストの座標空間の指定された矩形内に
描画され、必要に応じてスケーリングされます。透明ピクセルは、そこにすでに
存在するどのようなピクセルにも影響しません。

このメソッドは、イメージ全体が現在の出力デバイスに対してスケーリング済み、
ディザリング済み、変換済みでなくても、すべての場合にただちに復帰します。
現在の出力表現がまだ完全でない場合、drawImage は falseを返します。より多
くのイメージが利用可能になると、イメージをロードするプロセスが、その 
imageUpdate メソッドを呼び出すことによってイメージオブザーバに通知します。

スケーリングしていないイメージをこの出力デバイス用に構築しているという理
由だけで、スケーリングしたイメージをただちに使用できるとはかぎりません。
イメージはサイズごとに個別にキャッシュされ、元のデータから別のイメージ作
成シーケンスによって生成されることもあるからです。

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

引数に指定したImageクラスのオブジェクトを、画像の左上が引数に指定した(x, y)の位置になるように表示する点は同じですが、表示される画像の幅と高さを指定し、そのサイズになるように調整された表示されます。

サンプルプログラム

では実際に試してみましょう。元の大きさの2倍の大きさぐらいになるように表示してみます。

ImageTest3.java

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

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

public class ImageTest3 extends Applet{
  Image img;

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

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

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

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

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

ImageTest3.html

( Written by Tatsuo Ikura )