目次 | 前へ | 次へ

3.7 イベントの待機

As an image is being read or written, the plug-in may provide updates to the 
application. The application may provide one or more classes that implement 
interfaces from the javax.image.event package. Instances of these classes are then 
added to the ImageReader or ImageWriter being used. For example,

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 © 1993, 2013, Oracle and/or its affiliates. All rights reserved.
連絡先