目次 | 前の項目 | 次の項目 | JavaTM Image I/O API ガイド |
イメージの読み込み中または書き込み中に、プラグインからアプリケーションに最新情報を提供することができます。 アプリケーションでは、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
の実行が途中までしか完了していなくても、その実行を中止してメソッドから復帰させます。
IIOReadProgressListener
インタフェース
IIOReadProgressListener
は、読み込み中に簡単なステータス情報を提供するために使用できます。このインタフェースからは、推定の読み取り完了率が提供されます。この情報は、Swing のJProgressBar
かその他の進捗インジケータを更新したり、大きいイメージを読み込む際の残り時間を推定したりするために使用できます。
imageStarted
メソッドは、読み込み開始の時点で呼び出されます。読み込み中は、imageProgress
メソッドが複数回にわたって呼び出されます (呼び出されるたびに、percentageDone
パラメータの値が増えている)。読み込みが完了しようとしている時点で、imageComplete
メソッドが呼び出されます。同様に、
thumbnailStarted
、thumbnailProgress
、およびthumbnailComplete
メソッドが、サムネールの読み込み中に呼び出されます。その他のメソッドとして、
ImageReader.readAll
メソッドによる一連のイメージの読み込みの開始と終了を示すメソッドがあります。さらに、進行中の読み込みはImageReader.abort
を使って中止させることができますが、その場合には、リスナーオブジェクトのreadAborted
メソッドが呼び出されます。
IIOReadUpdateListener
インタフェース
IIOReadUpdateListener
は、イメージ読み込みの進行状況について、さらに詳細な情報を提供します。一部のイメージ形式では、インタレース方式のエンコーディング、またはプログレシブ方式のエンコーディングが可能です。そのようにエンコードされたイメージでは、ピクセルデータのサブセットをすばやく取得できるので、画質の粗いイメージがすぐに表示された後、残りのピクセルデータの受信と復号化が続行されます。従来の方式では、4 行につき 1 行ずつ、かつその行の中で 4 ピクセルにつき 1 ピクセルずつ送信が始まるので、最初のイメージの表示に必要なのは、送信されてきて復号化されるデータの合計量の 16 分の 1 だけでした。もしインタレースを使用しなかったとすると、同じ時間内に、イメージ上端の 16 分の 1 の部分しか表示されません。したがって、インタレース方式のイメージを見る人は、従来どおり左から右、上から下へと描画されるイメージを見る場合よりもずっと早く、イメージの内容について感触をつかむことができます。
IIOReadUpdateListener
インタフェースのメソッドを実装することにより、アプリケーションでは、非連続の可能性があるピクセルグループを表示する準備ができた時点で、通知を受け取ることができます。さらに、このインタフェースのメソッドは、描画途中のBufferedImage
への参照も受け取るので、新たに復号化されたピクセルで表示を更新するためにそれを利用できます。インタレース方式またはプログレシブ方式のイメージの復号化は、複数パスに分けられて進行します。それぞれのパスの開始時点で、リスナーオブジェクトの
passStarted
メソッドが呼び出されて、そのパスの処理中に上書きされる可能性のあるピクセルセットを示します。これは控えめに見積もっているため、その領域内のすべてのピクセルがそのパスで必ずしも更新されるとは限りません。パスが進行するにつれて、imageUpdate
メソッドが、新しい値を受け取ったピクセル領域を示す引数とともに呼び出されます。この領域は、左上隅の座標、幅と高さ、そしてそのパスで処理されるピクセル間の間隔 (前述の例で言えば、最初のパスにおけるこのパラメータは、縦横ともに 4) によって記述されます。パスが完了すると、passComplete
メソッドが呼び出されます。サムネールイメージの読み込み状況も、これらと同様のメソッドを利用して追跡できます。
IIOReadWarningListener
インタフェース
IIOReadWarningListener
をImageReader
に付加すると、致命的ではないエラーについての情報を受け取ることができます。たとえば、読み込みオブジェクトは、そこに存在するはずのないタグやデータを検出することがあります。読み込みオブジェクトは、そのエラーを無視して復号化を続行することもできますが、入力ソースに形式上の間違いがあることをアプリケーションに通知することもできます。その間違いは、イメージを生成したアプリケーションに問題があることを示している可能性があります。
ImageReader
は、翻訳された警告メッセージの提供可能なLocale
セットを指定することができます。利用可能なロケールは、読み込みオブジェクトのgetAvailableLocales
メソッドから入手できます。その後、必要なロケールを設定するには、IIOReadWarningListener
を付加する前に、読み込みオブジェクトのsetLocale
メソッドを呼び出します。各リスナーが受け取るメッセージは、そのリスナーが読み込みオブジェクトに付加される時点で有効だったLocale
の言語になります。
IIOWriteProgressListener
および IIOWriteWarningListener
インタフェース
IIOWriteProgressListener
およびIIOWriteWarningListener
の各インタフェースは、読み込みオブジェクトの対応するインタフェースと同様に機能します。