目次 | 前の項目 | 次の項目 JavaTM Image I/O API ガイド


3.7 イベントの待機

イメージの読み込み中または書き込み中に、プラグインからアプリケーションに最新情報を提供することができます。
アプリケーションでは、javax.image.event パッケージのインタフェースを実装した 1 つまたは複数のクラスを提供できます。
これらのクラスのインスタンスは、使用されている ImageReader または ImageWriter に追加されます。次に例を示します。

class MyReadProgressListener implements IIOReadProgressListener {

	public MyReadProgressListener() {}

	public void imageStarted(ImageReader source) {
		System.out.println("Started reading!");
	}

	// Other methods from IIOReadProgressListener omitted
}

IIOReadProgressListener listener = new MyReadProgressListener();
reader.addIIOReadProgressListener(listener);
ImageReader.read メソッドの処理が進むにつれて、さまざまな時点で listener のメソッドが呼び出されて、読み取られたイメージの量を示します。これらのメソッドは ImageReader.read メソッドがアクティブな間に呼び出されるので、それらのメソッドからは、同じ ImageReader オブジェクトに属する大部分のメソッドを呼び出さないでください。呼び出してもよいのは、ImageReader.abort() です。このメソッドは、ImageReader.read の実行が途中までしか完了していなくても、その実行を中止してメソッドから復帰させます。


3.7.1 IIOReadProgressListener インタフェース

IIOReadProgressListener は、読み込み中に簡単なステータス情報を提供するために使用できます。このインタフェースからは、推定の読み取り完了率が提供されます。この情報は、Swing の JProgressBar かその他の進捗インジケータを更新したり、大きいイメージを読み込む際の残り時間を推定したりするために使用できます。

imageStarted メソッドは、読み込み開始の時点で呼び出されます。読み込み中は、imageProgress メソッドが複数回にわたって呼び出されます (呼び出されるたびに、percentageDone パラメータの値が増えています)。読み込みが完了しようとしている時点で、imageComplete メソッドが呼び出されます。

同様に、thumbnailStartedthumbnailProgress、および thumbnailComplete メソッドが、サムネールの読み込み中に呼び出されます。

その他のメソッドとして、 ImageReader.readAll メソッドによる一連のイメージの読み込みの開始と終了を示すメソッドがあります。さらに、進行中の読み込みは ImageReader.abort を使って中止させることができますが、その場合には、リスナーオブジェクトの readAborted メソッドが呼び出されます。


3.7.2 IIOReadUpdateListener インタフェース

IIOReadUpdateListener は、イメージ読み込みの進行状況について、さらに詳細な情報を提供します。一部のイメージ形式では、インタレース方式のエンコーディング、またはプログレシブ方式のエンコーディングが可能です。そのようにエンコードされたイメージでは、ピクセルデータのサブセットをすばやく取得できるので、画質の粗いイメージがすぐに表示された後、残りのピクセルデータの受信と復号化が続行されます。従来の方式では、4 行につき 1 行ずつ、かつその行の中で 4 ピクセルにつき 1 ピクセルずつ送信が始まるので、最初のイメージの表示に必要なのは、送信されてきて復号化されるデータの合計量の 16 分の 1 だけでした。もしインタレースを使用しなかったとすると、同じ時間内に、イメージ上端の 16 分の 1 の部分しか表示されません。したがって、インタレース方式のイメージを見る人は、従来どおり左から右、上から下へと描画されるイメージを見る場合よりもずっと早く、イメージの内容について感触をつかむことができます。

IIOReadUpdateListener インタフェースのメソッドを実装することにより、アプリケーションでは、非連続の可能性があるピクセルグループを表示する準備ができた時点で、通知を受け取ることができます。さらに、このインタフェースのメソッドは、描画途中の BufferedImage への参照も受け取るので、新たに復号化されたピクセルで表示を更新するためにそれを利用できます。

インタレース方式またはプログレシブ方式のイメージの復号化は、複数パスに分けられて進行します。それぞれのパスの開始時点で、リスナーオブジェクトの passStarted メソッドが呼び出されて、そのパスの処理中に上書きされる可能性のあるピクセルセットを示します。これは控えめに見積もっているため、その領域内のすべてのピクセルがそのパスで必ずしも更新されるとは限りません。パスが進行するにつれて、imageUpdate メソッドが、新しい値を受け取ったピクセル領域を示す引数とともに呼び出されます。この領域は、左上隅の座標、幅と高さ、そしてそのパスで処理されるピクセル間の間隔 (前述の例で言えば、最初のパスにおけるこのパラメータは、縦横ともに 4 です) によって記述されます。パスが完了すると、passComplete メソッドが呼び出されます。サムネールイメージの読み込み状況も、これらと同様のメソッドを利用して追跡できます。


3.7.3 IIOReadWarningListener インタフェース

IIOReadWarningListenerImageReader に付加すると、致命的なエラーについての情報を受け取ることができます。たとえば、読み込みオブジェクトは、そこに存在するはずのないタグやデータを検出することがあります。読み込みオブジェクトは、そのエラーを無視して復号化を続行することもできますが、入力ソースに形式上の間違いがあることをアプリケーションに通知することもできます。その間違いは、イメージを生成したアプリケーションに問題があることを示している可能性があります。

ImageReader は、翻訳された警告メッセージの提供可能な Locale セットを指定することができます。利用可能なロケールは、読み込みオブジェクトの getAvailableLocales メソッドから入手できます。その後、必要なロケールを設定するには、IIOReadWarningListener を付加する前に、読み込みオブジェクトの setLocale メソッドを呼び出します。各リスナーが受け取るメッセージは、そのリスナーが読み込みオブジェクトに付加される時点で有効だった Locale の言語になります。


3.7.4 IIOWriteProgressListener および IIOWriteWarningListener インタフェース

IIOWriteProgressListener および IIOWriteWarningListener の各インタフェースは、読み込みオブジェクトの場合の対応するインタフェースと同様に機能します。



目次 | 前の項目 | 次の項目
Copyright © 2001 Sun Microsystems, Inc. All Rights Reserved.