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

クラスImageWriterSpi

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

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

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

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

サービスに関連する形式名、ファイル接尾辞、およびMIMEタイプのリストは、それぞれgetFormatNamesgetFileSuffixes、およびgetMIMETypeメソッドで取得できます。 これらのメソッドは、手動の形式選択、ファイルの命名、またはMIME関連付けに基づき、特定のファイルまたはストリームに書き込むための候補となるImageWriterの識別に使用することができます。

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

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

関連項目:
IIORegistry, ImageTypeSpecifier, ImageWriter
  • フィールド詳細

    • STANDARD_OUTPUT_TYPE

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

      protected クラス<?>[] outputTypes
      getOutputTypesから返されるClassオブジェクトの配列で、最初はnullです。
    • readerSpiNames

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

    • ImageWriterSpi

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

      public ImageWriterSpi​(String vendorName, String version, String[] names, String[] suffixes, String[] MIMETypes, String writerClassName, Class<?>[] outputTypes, String[] readerSpiNames, boolean supportsStandardStreamMetadataFormat, String nativeStreamMetadataFormatName, String nativeStreamMetadataFormatClassName, String[] extraStreamMetadataFormatNames, String[] extraStreamMetadataFormatClassNames, boolean supportsStandardImageMetadataFormat, String nativeImageMetadataFormatName, String nativeImageMetadataFormatClassName, String[] extraImageMetadataFormatNames, String[] extraImageMetadataFormatClassNames)
      指定された値セットを使用してImageWriterSpiを構築します。
      パラメータ:
      vendorName - ベンダー名(null以外のString)。
      version - バージョン識別子(null以外のString)。
      names - 形式名を示すnull以外のString配列。 1つ以上のエントリが存在する必要がある。
      suffixes - 共通のファイル接尾辞を示すString配列。 接尾辞が定義されていない場合は、nullを指定する。 長さ0の配列はnullに正規化される。
      MIMETypes - 形式のMIMEタイプを示すString配列。 接尾辞が定義されていない場合は、nullを指定する。 長さ0の配列はnullに正規化される。
      writerClassName - 関連付けられたImageWriterSpiクラスの完全修飾名(null以外のString)。
      outputTypes - 正当な出力タイプを示す、長さ1以上のClassオブジェクトの配列。
      readerSpiNames - 関連するすべてのImageReaderのクラスを命名する、長さ1以上の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 - writerClassNamenullの場合。
      IllegalArgumentException - outputTypesnullまたは長さ0の場合。
  • メソッドの詳細

    • isFormatLossless

      public boolean isFormatLossless()
      このライターが出力する形式がピクセル・データをビット精度で保持する場合はtrueを返します。 デフォルトの実装ではtrueを返します。
      戻り値:
      形式が完全な精度でピクセルを保持する場合はtrue
    • getOutputTypes

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

      ImageOutputStreamにのみ出力するほとんどのライターの場合、ImageOutputStream.classを含む単一要素の配列が返されます。

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

      public abstract boolean canEncodeImage​(ImageTypeSpecifier type)
      このサービス・プロバイダに関連するImageWriter実装が、指定されたレイアウトでイメージをエンコードできる場合は、trueを返します。 レイアウト(つまりイメージのSampleModelColorModel)はImageTypeSpecifierオブジェクトで記述されます。

      trueが返されても、エンコーディングが成功するとは限りません。エンコーディング処理で、入出力エラー、不整合または不正なデータ構造などによりエラーが発生する場合があります。この目的は、イメージがエンコーディング形式のスコープ内であるかどうかを判定するために、イメージの基本構造を適切に検証することです。 たとえば、グレー・スケールのみをエンコード可能な形式用のサービス・プロバイダは、RGB BufferedImageが渡されるとfalseを返します。 同様に、8ビットRGBイメージをエンコードできるサービス・プロバイダは、関連するアルファ・チャネルを持つイメージをエンコードしない場合があります。

      ImageWriter (サービス・プロバイダ)の中には、多少厳格なものがあります。 たとえば、格納するためにある程度精度を低下させて各ピクセルを除算する必要があっても、事前にアルファを乗算したイメージを受け取る場合があります。

      パラメータ:
      type - 書き込まれるイメージのレイアウトを指定するImageTypeSpecifier
      戻り値:
      このライターが指定されたレイアウトでイメージをエンコードできる可能性が高い場合はtrue
      例外:
      IllegalArgumentException - typenullの場合。
    • canEncodeImage

      public boolean canEncodeImage​(RenderedImage im)
      このサービス・プロバイダに関連するImageWriter実装が、指定されたRenderedImageインスタンスをエンコードできる場合は、trueを返します。 これにはjava.awt.image.BufferedImageのインスタンスが含まれます。

      このメソッドのセマンティックスの詳細は、canEncodeImage(ImageTypeSpecifier)の説明を参照してください。

      パラメータ:
      im - エンコードされるRenderedImageのインスタンス。
      戻り値:
      このライターがこのイメージをエンコードできる可能性が高い場合はtrue
      例外:
      IllegalArgumentException - imnullの場合。
    • createWriterInstance

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

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

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

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

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

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

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

      public boolean isOwnWriter​(ImageWriter writer)
      渡されたImageWriterオブジェクトがこのサービス・プロバイダに関連するImageWriterのインスタンスの場合は、trueを返します。
      パラメータ:
      writer - ImageWriterインスタンス。
      戻り値:
      writerが認識される場合はtrue
      例外:
      IllegalArgumentException - writernullの場合。
    • getImageReaderSpiNames

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

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

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

      戻り値:
      ImageReaderSpiの名前を含む長さ1以上のStringの配列、またはnull
      関連項目:
      ImageIO.getImageReader(ImageWriter), ImageReaderSpi.getImageWriterSpiNames()