目次|前|次 |
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
の各インタフェースは、読込みオブジェクトの場合の対応するインタフェースと同様に機能します。