Java アプレットは、GIF ファイルに保存された画像を表示するためによく使用されます。 Java アプレットで GIF 画像をロードするのは非常に簡単です。アプレットで画像ファイルを使用する場合は、Image オブジェクトを定義する必要があります。ほとんどの Java アプレットは、GIF または JPEG 形式の画像ファイルを使用します。アプレットは getImage メソッドを使用して、画像ファイルを Image オブジェクトに関連付けます。
Image オブジェクトを表示するには、Graphics クラスのdrawImage メソッドを使用します。画像の表示効果を向上させるために、多くのアプレットはダブル バッファリング テクノロジを使用しています。つまり、最初に画像をメモリにロードし、次にそれを画面に表示します。
アプレットは、imageUpdate メソッドを通じて、すでにメモリ内にある画像の量を確認できます。
画像のロード
Java は画像を Image オブジェクトとして扱うため、画像をロードするときは、最初に Image オブジェクトを定義し、次に getImage メソッドを使用して Image オブジェクトと画像ファイルを接続する必要があり
ます
。
pic=getImage(getCodeBase( ),"画像ファイル名.GIF");
getImage メソッドには 2 つのパラメータがあります。最初のパラメータは getCodeBase メソッドの呼び出しで、アプレットの URL アドレス ( www.sun.com/Appletなど) を返します。 2 番目のパラメータは、URL からロードする画像ファイルの名前を指定します。イメージ ファイルがアプレットの下のサブディレクトリにある場合は、対応するディレクトリ パスをファイル名に含める必要があります。
getImage メソッドを使用して画像をロードした後、アプレットは Graphics クラスのdrawImage メソッドを使用して画像を表示できます。
g.drawImage(Picture,x,y,this);
drayImage メソッドのパラメータ
。表示する画像とこれの左上隅の x 座標と y 座標を指定します。
4 番目のパラメーターの目的は、ImageObServer インターフェイスを実装するオブジェクト、つまり imageUpdate メソッド (このメソッドについては後で説明します) を定義するオブジェクトを指定することです。
表示画像(ShowImage.java)
//ソースプログラム一覧
java.awt.* をインポートします。
java.applet.* をインポートします。
パブリック クラス ShowImage はアプレットを拡張します
Image picure; //Image 型のメンバー変数を定義します。
パブリック void init()
{
pic=getImage(getCodeBase(),"Image.gif"); //画像をロード
}
パブリックボイドペイント(グラフィックスg)
{
g.drawImage(picture,0,0,this); //画像を表示
}
この
ため、HTML ファイル内のアプレットに関する記述は次のとおりです
。
<TITLE>画像アプレットを表示</TITLE>
<アプレット
CODE="ShowImage.class" //クラスファイル名はShowImage.classです
幅=600
高さ=400>
</アプレット>
</HTML>
コンパイル後にアプレットを実行すると、イメージが一度に作成されません。これは、drawImage メソッドが返される前に、プログラムがイメージを完全にロードして表示しないためです。対照的に、drawImage メソッドは、アプレットの元の実行スレッドと同時に実行されるスレッドを作成し、同時にロードされて表示されるため、この不連続性が生じます。表示効果を向上させるため。多くのアプレットはイメージ ダブル バッファリング テクノロジを使用しています。つまり、イメージはメモリに完全にロードされてから画面に表示されるため、イメージを一度に表示できます。
画像のダブルバッファリング 画像
の表示効果を向上させるには、ダブルバッファリング技術を使用する必要があります。画像はまずメモリにロードされ、次にアプレット ウィンドウに表示されます。
ダブルバッファリング画像技術利用例(BackgroundImage.java)
//ソースプログラム一覧
java.awt.* をインポートします。
java.applet.* をインポートします。
public class BackgroundImage extends Applet //アプレットを継承
{
イメージ画像;
ブール値 ImageLoaded=false;
パブリック void init()
{
pic=getImage(getCodeBase(),"Image.gif"); //画像をロードします 画像 offScreenImage=createImage(size().width,size().height);
//メソッド createImage を使用して画像オブジェクトのグラフィックを作成 offScreenGC=offScreenImage.getGraphics(); //グラフィック オブジェクトを取得 offScreenGC.drawImage(picture,0,0,this); //オフスクリーン画像を表示}
パブリックボイドペイント(グラフィックスg)
{
if(画像がロードされました)
{
g.drawImage(picture,0,0,null); //画像を表示します。4 番目のパラメータは null です。
showStatus("完了");
}
それ以外
showStatus("画像の読み込み中");
}
public boolean imageUpdate(画像 img,int infoflags,int x,int y,int w,int h)
{
if(infoflags= =ALLBITS)
{
imageLoaded=true;
リペイント();
false を返します。
}
それ以外
true を返します。
}
アプレットの init メソッドを分析すると、このメソッドは最初に offScreenImage という名前の Image オブジェクトを定義し、それに createImage メソッドの戻り値を割り当て、次に offScreenGC という名前の Graphics オブジェクトを作成し、それにグラフィック環境 (非画面) を割り当てていることがわかります
。
それによってイメージが生まれます。ここではオフスクリーン イメージが描画されるため、アプレット ウィンドウにはイメージが表示されません。
アプレットがdrawImageメソッドを呼び出すたびに、drawImageはimageUpdateメソッドを呼び出すスレッドを作成します。アプレットは、imageUpdate メソッドでメモリに読み込まれたイメージの量を確認できます。 drawImage によって作成されたスレッドは、メソッドが false を返すまで、imageUpdate メソッドを呼び出し続けます。
imageUpdate メソッドの 2 番目のパラメーター infoflags により、アプレットは画像がどのようにメモリにロードされるかを知ることができます。このパラメータは ImageLoaded と等しく、true に設定され、repaint メソッドが呼び出されてアプレット ウィンドウが再描画されます。このメソッドは最終的に false を返し、drawImage 実行スレッドが imageUpdate メソッドを再度呼び出すのを防ぎます。
ペイント メソッドでのアプレットの動作は、ImageLoaded 変数によって制御されます。この変数が true になると、paint メソッドはdrawImage メソッドを呼び出してイメージを表示します。ペイント メソッドがdrawImage メソッドを呼び出すとき、4 番目のパラメータとして null を受け取ります。これにより、drawImage は imageUpdate メソッドを呼び出すことができなくなります。この時点で画像はメモリにロードされているため、アプレットウィンドウへの画像の表示は一度で完了します。