モジュール java.desktop
パッケージ javax.imageio.spi

クラスImageReaderSpi

  • すべての実装されたインタフェース:
    RegisterableService

    public abstract class ImageReaderSpi
    extends ImageReaderWriterSpi
    ImageReaderのサービス・プロバイダ・インタフェース(SPI)です。 サービス・プロバイダ・クラスの詳細は、IIORegistryクラスのクラス・コメントを参照してください。

    ImageReaderSpiは、関連するImageReaderクラスに関する複数の情報タイプを提供します。

    SPIクラスを定義するベンダー名とクラスの簡潔な説明は、getVendorNamegetDescription、およびgetVersionメソッドで取得できます。 これらのメソッドは、国際化してロケール固有の出力を行うことが可能です。 これらのメソッドの主な目的は、ポップアップ・メニューなどのリスト編成に使用可能で、簡潔かつ判読可能な情報を提供することです。

    サービスに関連する形式名、ファイル接尾辞、およびMIMEタイプのリストは、それぞれgetFormatNamesgetFileSuffixes、およびgetMIMETypesメソッドで取得できます。 これらのメソッドは、手動の形式選択、ファイルの命名、またはMIME関連付け(たとえば、HTTP経由または電子メール添付のファイル・アクセス)に基づき特定のファイルまたはストリームをデコードする際、候補となるImageReaderの識別に使用できます。

    特定のデータ・ストリームを構文解析できる可能性の高いImageReaderを判定するための、より信頼性の高い手段がcanDecodeInputメソッドに用意されています。 サービス・プロバイダは、このメソッドを使用して実際のストリーム内容を検証できます。

    このサービス・プロバイダに関連するImageReaderクラスのインスタンスは、createReaderInstanceメソッドを呼び出すことで取得できます。 ネイティブ・ライブラリのロードや大規模な表作成などの負荷の高い初期化は、少なくともこのメソッドが最初に呼び出されるまで延期する必要があります。

    関連項目:
    IIORegistry, ImageReader
    • フィールドの詳細

      • STANDARD_INPUT_TYPE

        @Deprecated
        public static final Class<?>[] STANDARD_INPUT_TYPE
        非推奨。
        このフィールドを使用する代わりに、同等の配列{ ImageInputStream.class }を直接作成してください。
        getInputTypesから返される単一要素の配列で、最初はImageInputStream.classが格納されています。
      • inputTypes

        protected Class<?>[] inputTypes
        getInputTypesから返されるClassオブジェクトの配列で、最初はnullです。
      • writerSpiNames

        protected String[] writerSpiNames
        getImageWriterSpiNamesから返される文字列の配列で、最初はnullです。
    • コンストラクタの詳細

      • ImageReaderSpi

        protected ImageReaderSpi()
        空白のImageReaderSpiを構築します。 すべてのメソッドの作業バージョンを提供するための、インスタンス変数の初期化やメソッド実装のオーバーライドは、サブクラスで行う必要があります。
      • ImageReaderSpi

        public ImageReaderSpi​(String vendorName,
                              String version,
                              String[] names,
                              String[] suffixes,
                              String[] MIMETypes,
                              String readerClassName,
                              Class<?>[] inputTypes,
                              String[] writerSpiNames,
                              boolean supportsStandardStreamMetadataFormat,
                              String nativeStreamMetadataFormatName,
                              String nativeStreamMetadataFormatClassName,
                              String[] extraStreamMetadataFormatNames,
                              String[] extraStreamMetadataFormatClassNames,
                              boolean supportsStandardImageMetadataFormat,
                              String nativeImageMetadataFormatName,
                              String nativeImageMetadataFormatClassName,
                              String[] extraImageMetadataFormatNames,
                              String[] extraImageMetadataFormatClassNames)
        指定された値セットを使用してImageReaderSpiを構築します。
        パラメータ:
        vendorName - ベンダー名(null以外のString)。
        version - バージョン識別子(null以外のString)。
        names - 形式名を示すnull以外のString配列。 1つ以上のエントリが存在する必要がある。
        suffixes - 共通のファイル接尾辞を示すString配列。 接尾辞が定義されていない場合は、nullを指定する。 長さ0の配列はnullに正規化される。
        MIMETypes - 形式のMIMEタイプを示すString配列。 MIMEタイプが定義されていない場合は、nullを指定する。 長さ0の配列はnullに正規化される。
        readerClassName - 関連付けられたImageReaderクラスの完全修飾名(null以外のString)。
        inputTypes - 正当な入力タイプを示す、長さ1以上のClassオブジェクトの配列(null以外)。
        writerSpiNames - 関連するすべてのImageWriterのクラスを命名するString配列、またはnull 長さ0の配列はnullに正規化される。
        supportsStandardStreamMetadataFormat - ストリーム・メタデータ・オブジェクトが標準メタデータ形式で記述されたツリーを使用可能かどうかを示すboolean
        nativeStreamMetadataFormatName - getNativeStreamMetadataFormatNameから返されるString、またはnull
        nativeStreamMetadataFormatClassName - getNativeStreamMetadataFormatから返されるメタデータ形式オブジェクトのインスタンス化で使用するString、またはnull
        extraStreamMetadataFormatNames - getExtraStreamMetadataFormatNamesから返されるStringの配列、またはnull 長さ0の配列はnullに正規化される。
        extraStreamMetadataFormatClassNames - getStreamMetadataFormatから返されるメタデータ形式オブジェクトのインスタンス化で使用するStringの配列、またはnull 長さ0の配列はnullに正規化される。
        supportsStandardImageMetadataFormat - イメージ・メタデータ・オブジェクトが、標準のメタデータ形式で記述されたツリーを使用できるかどうかを示すboolean
        nativeImageMetadataFormatName - getNativeImageMetadataFormatNameから返されるString、またはnull
        nativeImageMetadataFormatClassName - getNativeImageMetadataFormatから返されるメタデータ形式オブジェクトのインスタンス化で使用するString、またはnull
        extraImageMetadataFormatNames - getExtraImageMetadataFormatNamesから返されるStringの配列。 長さ0の配列はnullに正規化される。
        extraImageMetadataFormatClassNames - getImageMetadataFormatから返されるメタデータ形式オブジェクトのインスタンス化で使用するStringの配列、またはnull 長さ0の配列はnullに正規化される。
        例外:
        IllegalArgumentException - vendorNamenullの場合。
        IllegalArgumentException - versionnullの場合。
        IllegalArgumentException - namesnullまたは長さ0の場合。
        IllegalArgumentException - readerClassNamenullの場合。
        IllegalArgumentException - inputTypesnullまたは長さ0の場合。
    • メソッドの詳細

      • getInputTypes

        public Class<?>[] getInputTypes()
        リーダーのsetInputメソッドの引数に使用可能なオブジェクトの型を示すClassオブジェクトの配列を返します。

        ImageInputStreamからの入力を受け取るだけの大半のリーダーの場合、ImageInputStream.classを含む単一要素の配列が返されます。

        戻り値:
        長さ1以上のClass オブジェクトの、null以外の配列。
      • canDecodeInput

        public abstract boolean canDecodeInput​(Object source)
                                        throws IOException
        指定されたソース・オブジェクトがこのリーダーでサポートされる形式であると見なされる場合にtrueを返します。 このメソッドからtrueが返されても読込みに成功することは保証されず、ストリーム内容の簡潔な検証に基づき成功の可能性がかなり高いと見なされたにすぎません。 ソースがImageInputStreamの場合、実装は一般的にストリームの最初の数バイトをチェックして、この形式に関連付けられた「マジック番号」を確認します。 実際の読込みが開始されても、デコーディングが完了するまでいつでもリーダーは失敗する可能性があります。

        ほかのImageReaderSpiがオブジェクトをデコードできるかどうか適切に判定できるように、オブジェクトの状態を妨げないことが重要です。 特に、ソースがImageInputStreamの場合、mark/resetのペアを使用してストリーム位置を保持する必要があります。

        ほとんどすべてのストリームの読込みを試みる可能性のある「raw」などの形式では、より適切なものよりも優先して呼び出されるのを避けるために、falseを返す必要があります。

        sourcegetInputTypesから返されたクラスのいずれでもない場合、このメソッドはfalseを返すだけです。

        パラメータ:
        source - デコードされるオブジェクト。通常はImageInputStream
        戻り値:
        このストリームをデコード可能な場合はtrue
        例外:
        IllegalArgumentException - sourcenullである場合。
        IOException - ストリームの読取り中に入出力エラーが発生した場合。
      • createReaderInstance

        public ImageReader createReaderInstance()
                                         throws IOException
        このサービス・プロバイダに関連するImageReader実装のインスタンスを返します。 返されるオブジェクトの初期状態は、resetメソッドの呼出し後のような状態です。

        デフォルトの実装では、createReaderInstance(null)を返すだけです。

        戻り値:
        ImageReaderインスタンス。
        例外:
        IOException - リーダー・クラスのロードや初期化、またはリーダー・オブジェクトのインスタンス化や初期化でエラーが発生した場合。
      • createReaderInstance

        public abstract ImageReader createReaderInstance​(Object extension)
                                                  throws IOException
        このサービス・プロバイダに関連するImageReader実装のインスタンスを返します。 返されるオブジェクトの初期状態は、resetメソッドの呼出し後のような状態です。

        構築時にObjectをプラグインに提供できます。 オブジェクトの特性は、プラグインによって異なります。

        通常、プラグインはreturn new MyImageReader(this)などのコードを使用してこのメソッドを実装します。

        パラメータ:
        extension - プラグイン固有の拡張オブジェクト。nullも可。
        戻り値:
        ImageReaderインスタンス。
        例外:
        IOException - リーダーのインスタンス化に失敗した場合。
        IllegalArgumentException - 拡張オブジェクトが適切でないことを示すためにImageReaderのコンストラクタがIllegalArgumentExceptionをスローする場合。
      • isOwnReader

        public boolean isOwnReader​(ImageReader reader)
        渡されたImageReaderオブジェクトがこのサービス・プロバイダに関連するImageReaderのインスタンスの場合は、trueを返します。

        デフォルトの実装では、引数readerの完全指定クラス名とコンストラクタに渡されたクラス名を比較します。 さらに高度なチェックが必要な場合は、このメソッドをオーバーライドできます。

        パラメータ:
        reader - ImageReaderインスタンス。
        戻り値:
        readerが認識される場合はtrue
        例外:
        IllegalArgumentException - readernullの場合。
      • getImageWriterSpiNames

        public String[] getImageWriterSpiNames()
        このサービス・プロバイダに関連するImageReaderが使用する内部メタデータ表現を認識可能なImageWriterSpiクラスすべての完全修飾名を含むString配列を返します。この種のImageWriterが指定されていない場合はnullを返します。 null以外の値が返される場合は、0以外の長さになります。

        配列の最初の項目は、ImageIO.getImageWriter(ImageReader)から返されるImageWriterのインスタンス化で使用されるため、「優先される」ライターのサービス・プロバイダ名である必要があります。

        このメカニズムは、ImageReaderで生成されたピクセル以外のメタデータ(IIOTreeInfoを参照)の内部構造を認識するImageWritersの取得に使用できます。 ImageReaderからこのデータを取得して、このメソッドで取得したいずれかのImageWritersに渡すと、クライアント・プログラムで、すべてのメタデータを保持しつつ、イメージの読込みや変更、書戻しを行うことができ、メタデータの内部構造やイメージ形式でさえ何も意識する必要はありません。

        戻り値:
        ImageWriterSpiの名前を含む長さ1以上のStringの配列、またはnull
        関連項目:
        ImageIO.getImageWriter(ImageReader)