目次||

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, 2020, Oracle and/or its affiliates. All rights reserved.