目次 | 前へ | 次へ |
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 thejavax.image.event
package. Instances of these classes are then added to theImageReader
orImageWriter
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
の実行が途中までしか完了していなくても、その実行を中止してメソッドから復帰させます。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
の各インタフェースは、読み込みオブジェクトの場合の対応するインタフェースと同様に機能します。