Module  java.desktop
软件包  javax.imageio.spi

Class ImageWriterSpi

  • All Implemented Interfaces:
    RegisterableService


    public abstract class ImageWriterSpi
    extends ImageReaderWriterSpi
    服务提供商接口(SPI),用于ImageWriter s。 有关服务提供商类的更多信息,请参阅IIORegistry类的类注释。

    每个ImageWriterSpi提供了与它相关联的ImageWriter类的几种类型的信息。

    谁定义的SPI类和类的简要描述的供应商的名称是通过提供getVendorNamegetDescription ,并getVersion方法。 这些方法可以被国际化以提供特定于区域的输出。 这些方法主要用于提供可用于组织弹出菜单或其他列表的简短的人类可写信息。

    格式名称,文件后缀,以及与该服务相关联MIME类型的列表可通过的方式获得getFormatNamesgetFileSuffixes ,和getMIMEType方法。 这些方法可用于识别基于手动格式选择,文件命名或MIME关联来编写特定文件或流的候选者ImageWriter

    通过canEncodeImage方法提供了一种更可靠的方法来确定哪些ImageWriter可能能够解析特定的数据流。 此方法允许服务提供商检查实际的图像内容。

    最后,可以通过调用createWriterInstance方法获得与此服务提供商相关联的ImageWriter类的实例。 任何重量级的初始化(如加载本机库或创建大型表)至少应该延迟至首次调用此方法为止。

    另请参见:
    IIORegistryImageTypeSpecifierImageWriter
    • 字段详细信息

      • STANDARD_OUTPUT_TYPE

        @Deprecated
        public static final Class<?>[] STANDARD_OUTPUT_TYPE
        已过时。 而不是使用这个字段,直接创建等效的数组{ ImageOutputStream.class }
        一个单元素数组,最初包含 ImageOutputStream.class ,从 getOutputTypes返回。
      • outputTypes

        protected Class<?>[] outputTypes
        一组 Class对象,从 getOutputTypes返回,最初为 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 s。 必须至少有一个条目。
        suffixes - 表示公共文件后缀的String的数组。 如果未定义后缀,则应提供null 长度为0的数组将被归一化为null
        MIMETypes - 表示格式的MIME类型的String s的数组。 如果未定义任何后缀,则应提供null 长度为0的数组将被归一化为null
        writerClassName - 相关联的 ImageWriterSpi类的完全限定名称,作为非 null String
        outputTypes - 长度为至少为1的 Class对象的数组,指示合法的输出类型。
        readerSpiNames - 数组String的长度至少为1,命名所有关联的ImageReader s的类,或null 长度为0的数组被归一化为null
        supportsStandardStreamMetadataFormat - 表示流元数据对象是否可以使用由标准元数据格式描述的树的 boolean
        nativeStreamMetadataFormatName - a Stringnull ,由 getNativeStreamMetadataFormatName
        nativeStreamMetadataFormatClassName - a Stringnull ,用于实例化从 getNativeStreamMetadataFormat返回的元数据格式对象。
        extraStreamMetadataFormatNames -的阵列String S或null从返回, getExtraStreamMetadataFormatNames 长度为0的数组被归一化为null
        extraStreamMetadataFormatClassNames - 用于实例化要从getStreamMetadataFormat返回的元数据格式对象的String s或null的数组。 长度为0的数组被归一化为null
        supportsStandardImageMetadataFormat - 表示图像元数据对象是否可以使用由标准元数据格式描述的树的 boolean
        nativeImageMetadataFormatName - a Stringnull ,将从 getNativeImageMetadataFormatName返回。
        nativeImageMetadataFormatClassName - a Stringnull ,用于实例化要从 getNativeImageMetadataFormat返回的元数据格式对象。
        extraImageMetadataFormatNames -的阵列String从返回小号getExtraImageMetadataFormatNames 长度为0的数组被归一化为null
        extraImageMetadataFormatClassNames - 用于实例化要从getImageMetadataFormat返回的元数据格式对象的String s或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​()
        返回一个Class对象的数组,指示可以使用什么类型的对象作为撰写者的setOutput方法的参数。

        对于只输出到ImageOutputStream大多数作者,应该返回包含ImageOutputStream.class的单元素数组。

        结果
        一个长度至少为1的非 null数组的 Class对象。
      • canEncodeImage

        public abstract boolean canEncodeImage​(ImageTypeSpecifier type)
        如果与此服务提供商相关联的ImageWriter实现能够对具有给定布局的图像进行编码,则返回true 布局( ,图像的SampleModelColorModel )由ImageTypeSpecifier对象描述。

        返回值为true并不是编码成功的绝对保证; 编码过程可能由于诸如I / O错误,不一致或畸形数据结构等因素而产生错误。意图是对图像的基本结构进行合理的检查,以便确定它是否在范围的编码格式。 例如,只能编码灰度的格式的服务提供商将返回false如果交给RGB BufferedImage 类似地,可以编码8位RGB图像的格式的服务提供商可能拒绝对具有相关联的Alpha通道的图像进行编码。

        不同的ImageWriter s,因此服务提供商,可能会选择或多或少严格。 例如,他们可能接受具有预乘法α的图像,即使它们必须被分割出每个像素,以某种精度损失,以便被存储。

        参数
        type - 指定要写入的图像的布局的 ImageTypeSpecifier
        结果
        true如果这个作者可能能够用给定的布局编码图像。
        异常
        IllegalArgumentException - 如果 typenull
      • canEncodeImage

        public boolean canEncodeImage​(RenderedImage im)
        返回true如果ImageWriter与此服务提供者关联实现能够编码给定的RenderedImage实例。 请注意,这包括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实例。
        结果
        true如果 writer认识
        异常
        IllegalArgumentException - 如果 writernull
      • getImageReaderSpiNames

        public String[] getImageReaderSpiNames​()
        返回的数组String包含所有的所有的完全合格的名称小号ImageReaderSpi类,可以理解由所使用的内部元数据表示ImageWriter与此服务提供商相关联,或null ,如果没有这样的ImageReaders指定。 如果返回非null值,那么它必须具有非零长度。

        数组中的第一个项目必须是“首选”读者的服务提供商的名称,因为它将用于实例化由ImageReader返回的ImageIO.getImageReader(ImageWriter)

        该机制可用于获得在ImageReaders理解的结构中将产生非像素元数据(见IIOExtraDataInfo )的ImageWriter 通过读取图像并从使用此方法获取的ImageReaders之一获取此数据,并将其传递给ImageWriter ,客户端程序可以读取图像,以某种方式进行修改,并将其写回保留所有元数据,而不需要了解元数据的内部结构,甚至了解图像格式。

        结果
        String的长度至少为1的数组,包含 ImageReaderSpi s或 null
        另请参见:
        ImageIO.getImageReader(ImageWriter), ImageReaderSpi.getImageWriterSpiNames()