Module java.desktop
Package javax.imageio

Class ImageReader

java.lang.Object
javax.imageio.ImageReader

public abstract class ImageReader extends Object
图像解析和解码的抽象超类。必须由在Java Image I/O框架上下文中读取图像的类继承此类。

ImageReader对象通常由特定格式的服务提供程序接口(SPI)类实例化。服务提供程序类(例如,ImageReaderSpi的实例)会注册到IIORegistry,后者用于格式识别和显示可用格式的读取器和写入器。

当设置输入源(使用setInput方法)时,可以将其标记为“仅向前搜索”。此设置意味着仅按顺序读取输入源中包含的图像,可能允许读取器避免缓存包含先前已读取图像相关数据的输入部分。

参见:
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected Locale[]
    一个Locale数组,可用于本地化警告消息,如果不支持本地化,则为null
    protected boolean
    如果当前输入源已被标记为允许通过setInput忽略元数据,则返回true
    protected Object
    setInput设置并由getInput检索的ImageInputStream或其他Object
    protected Locale
    用于本地化的当前Locale,如果未设置,则为null
    protected int
    用于阅读的最小有效索引,初始值为0。
    protected ImageReaderSpi
    实例化此对象的ImageReaderSpi,如果其身份未知或不存在,则为null
    当前注册的IIOReadProgressListener列表,默认初始化为null,与空List同义。
    protected boolean
    如果当前输入源已被标记为仅允许向前搜索,则返回true
    当前注册的IIOReadUpdateListener列表,默认初始化为null,与空List同义。
    当前注册的IIOReadWarningListener列表,默认初始化为null,与空List同义。
    protected List<Locale>
    与每个当前注册的IIOReadWarningListener关联的Locale列表,默认初始化为null,与空List同义。
  • Constructor Summary

    Constructors
    Modifier
    Constructor
    Description
    protected
    ImageReader(ImageReaderSpi originatingProvider)
    构造一个ImageReader并将其originatingProvider字段设置为提供的值。
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    abort()
    请求中止任何当前读取操作。
    protected boolean
    自读取器实例化以来或调用clearAbortRequest以来,如果已发出中止当前读取操作的请求,则返回true
    void
    IIOReadProgressListener添加到已注册进度侦听器列表中。
    void
    IIOReadUpdateListener添加到已注册更新侦听器列表中。
    void
    IIOReadWarningListener添加到已注册警告侦听器列表中。
    boolean
    如果此插件支持仅读取像素数据的Raster,则返回true
    protected static void
    checkReadParamBandSettings(ImageReadParam param, int numSrcBands, int numDstBands)
    读取器可能使用的实用方法,用于测试ImageReadParam的源和目标波段设置的有效性。
    protected void
    清除任何先前的中止请求。
    protected static void
    computeRegions(ImageReadParam param, int srcWidth, int srcHeight, BufferedImage image, Rectangle srcRegion, Rectangle destRegion)
    计算源图像的感兴趣区域和目标感兴趣区域,考虑源图像的宽度和高度、可选目标图像以及可选的ImageReadParam
    void
    允许释放此对象持有的任何资源。
    float
    getAspectRatio(int imageIndex)
    返回给定图像的宽度除以高度的纵横比作为float
    Locale[]
    返回一个Locale数组,可用于本地化警告侦听器和压缩设置。
    返回适用于此格式的默认ImageReadParam对象。
    protected static BufferedImage
    getDestination(ImageReadParam param, Iterator<ImageTypeSpecifier> imageTypes, int width, int height)
    返回应将解码的像素数据写入的BufferedImage
    返回输入源的格式的String标识。
    abstract int
    getHeight(int imageIndex)
    返回输入源中给定图像的像素高度。
    abstract IIOMetadata
    getImageMetadata(int imageIndex)
    返回包含与给定图像关联的元数据的IIOMetadata对象,如果读取器不支持读取元数据、设置为忽略元数据或没有可用元数据,则返回null
    getImageMetadata(int imageIndex, String formatName, Set<String> nodeNames)
    返回表示与给定图像关联的元数据的IIOMetadata对象,如果读取器不支持读取元数据或没有可用元数据,则返回null
    getImageTypes(int imageIndex)
    返回包含给定图像可能解码为的图像类型的ImageTypeSpecifiers形式的Iterator
    返回先前设置为输入源的ImageInputStream或其他Object
    返回当前设置的Locale,如果未设置,则返回null
    int
    返回读取图像、缩略图或图像元数据的最低有效索引。
    abstract int
    getNumImages(boolean allowSearch)
    返回当前输入源中可用的图像数量(不包括缩略图)。
    int
    getNumThumbnails(int imageIndex)
    返回与给定图像关联的缩略图预览图像的数量。
    返回在构造函数中传递的ImageReaderSpi
    getRawImageType(int imageIndex)
    返回指示最接近表示图像的“原始”内部格式的SampleModelColorModelImageTypeSpecifier
    protected static Rectangle
    getSourceRegion(ImageReadParam param, int srcWidth, int srcHeight)
    读取器可能使用的实用方法,用于计算应读取的源图像区域,考虑到提供的ImageReadParam中的源区域和子采样偏移设置。
    abstract IIOMetadata
    返回表示与输入源整体关联的元数据的IIOMetadata对象(即,不与任何特定图像关联),如果读取器不支持读取元数据、设置为忽略元数据或没有可用元数据,则返回null
    getStreamMetadata(String formatName, Set<String> nodeNames)
    返回表示与输入源整体关联的元数据的IIOMetadata对象(即,不与任何特定图像关联)。
    int
    getThumbnailHeight(int imageIndex, int thumbnailIndex)
    返回由ImageIndex索引的图像关联的thumbnailIndex索引的缩略图预览图像的高度。
    int
    getThumbnailWidth(int imageIndex, int thumbnailIndex)
    返回由ImageIndex索引的图像关联的thumbnailIndex索引的缩略图预览图像的宽度。
    int
    getTileGridXOffset(int imageIndex)
    返回给定图像中瓦片(0, 0)的左上角的X坐标。
    int
    getTileGridYOffset(int imageIndex)
    返回给定图像中瓦片(0, 0)的左上角的Y坐标。
    int
    getTileHeight(int imageIndex)
    返回给定图像中瓦片的高度。
    int
    getTileWidth(int imageIndex)
    返回给定图像中瓦片的宽度。
    abstract int
    getWidth(int imageIndex)
    返回输入源中给定图像的像素宽度。
    boolean
    hasThumbnails(int imageIndex)
    如果给定图像关联有缩略图预览图像,则返回true
    boolean
    如果当前输入源已通过将true作为ignoreMetadata参数传递给setInput方法而被标记为允许忽略元数据,则返回true
    boolean
    isImageTiled(int imageIndex)
    如果给定图像组织成瓦片,即等大小且不重叠的矩形,则返回true
    boolean
    isRandomAccessEasy(int imageIndex)
    如果给定图像的存储格式对像素的随机访问没有固有障碍,则返回true
    boolean
    如果当前输入源已通过将true作为seekForwardOnly参数传递给setInput方法而被标记为仅向前搜索,则返回true
    protected void
    通过调用它们的imageComplete方法向所有已注册的IIOReadProgressListener广播图像读取的完成。
    protected void
    processImageProgress(float percentageDone)
    通过调用它们的imageProgress方法向所有已注册的IIOReadProgressListener广播图像完成的当前百分比。
    protected void
    processImageStarted(int imageIndex)
    通过调用它们的imageStarted方法向所有已注册的IIOReadProgressListener广播图像读取的开始。
    protected void
    processImageUpdate(BufferedImage theImage, int minX, int minY, int width, int height, int periodX, int periodY, int[] bands)
    通过调用它们的imageUpdate方法向所有已注册的IIOReadUpdateListener广播一组样本的更新。
    protected void
    通过调用它们的passComplete方法向所有已注册的IIOReadUpdateListener广播渐进式传递的完成。
    protected void
    processPassStarted(BufferedImage theImage, int pass, int minPass, int maxPass, int minX, int minY, int periodX, int periodY, int[] bands)
    通过调用它们的passStarted方法向所有已注册的IIOReadUpdateListener广播渐进式传递的开始。
    protected void
    通过调用它们的readAborted方法向所有已注册的IIOReadProgressListener广播读取已中止。
    protected void
    通过调用它们的sequenceComplete方法向所有已注册的IIOReadProgressListener广播图像读取序列的完成。
    protected void
    processSequenceStarted(int minIndex)
    通过调用它们的sequenceStarted方法向所有已注册的IIOReadProgressListener广播图像读取序列的开始。
    protected void
    通过调用它们的thumbnailComplete方法向所有已注册的IIOReadProgressListener广播缩略图读取的完成。
    protected void
    通过调用它们的thumbnailPassComplete方法向所有已注册的IIOReadUpdateListener广播缩略图渐进式传递的完成。
    protected void
    processThumbnailPassStarted(BufferedImage theThumbnail, int pass, int minPass, int maxPass, int minX, int minY, int periodX, int periodY, int[] bands)
    通过调用它们的thumbnailPassStarted方法向所有已注册的IIOReadUpdateListener广播缩略图渐进式传递的开始。
    protected void
    processThumbnailProgress(float percentageDone)
    广播当前缩略图完成百分比给所有注册的IIOReadProgressListener,通过调用它们的thumbnailProgress方法。
    protected void
    processThumbnailStarted(int imageIndex, int thumbnailIndex)
    广播缩略图读取的开始给所有注册的IIOReadProgressListener,通过调用它们的thumbnailStarted方法。
    protected void
    processThumbnailUpdate(BufferedImage theThumbnail, int minX, int minY, int width, int height, int periodX, int periodY, int[] bands)
    广播缩略图图像中一组样本的更新给所有注册的IIOReadUpdateListener,通过调用它们的thumbnailUpdate方法。
    protected void
    通过调用它们的warningOccurred方法,向所有注册的IIOReadWarningListener广播警告消息。
    protected void
    processWarningOccurred(String baseName, String keyword)
    通过从ResourceBundle中获取的字符串,通过调用它们的warningOccurred方法,向所有注册的IIOReadWarningListener广播本地化的警告消息。
    read(int imageIndex)
    读取由imageIndex索引的图像,并将其作为完整的BufferedImage返回,使用默认的ImageReadParam
    abstract BufferedImage
    read(int imageIndex, ImageReadParam param)
    读取由imageIndex索引的图像,并将其作为完整的BufferedImage返回,使用提供的ImageReadParam
    readAll(int imageIndex, ImageReadParam param)
    读取由imageIndex索引的图像,并返回一个包含图像、缩略图和相关图像元数据的IIOImage,使用提供的ImageReadParam
    readAll(Iterator<? extends ImageReadParam> params)
    返回一个包含所有图像、缩略图和元数据的IIOImage对象的Iterator,从输入源开始的索引由getMinIndex给出。
    readAsRenderedImage(int imageIndex, ImageReadParam param)
    返回包含由imageIndex索引的图像内容的RenderedImage对象。
    boolean
    如果此阅读器理解的图像格式支持与之关联的缩略图预览图像,则返回true
    readRaster(int imageIndex, ImageReadParam param)
    返回一个包含来自图像流的原始像素数据的新Raster对象,没有应用任何颜色转换。
    readThumbnail(int imageIndex, int thumbnailIndex)
    返回由ImageIndex索引的图像关联的thumbnailIndex缩略图预览图像作为BufferedImage
    readTile(int imageIndex, int tileX, int tileY)
    读取由tileXtileY参数指示的瓦片,并将其作为BufferedImage返回。
    readTileRaster(int imageIndex, int tileX, int tileY)
    返回一个包含来自瓦片的原始像素数据的新Raster对象,没有应用任何颜色转换。
    void
    移除所有当前注册的IIOReadProgressListener对象。
    void
    移除所有当前注册的IIOReadUpdateListener对象。
    void
    移除所有当前注册的IIOReadWarningListener对象。
    void
    从注册的进度侦听器列表中移除一个IIOReadProgressListener
    void
    从注册的更新侦听器列表中移除一个IIOReadUpdateListener
    void
    从注册的错误侦听器列表中移除一个IIOReadWarningListener
    void
    reset()
    ImageReader恢复到初始状态。
    void
    setInput(Object input)
    将输入源设置为给定的ImageInputStream或其他Object
    void
    setInput(Object input, boolean seekForwardOnly)
    将输入源设置为给定的ImageInputStream或其他Object
    void
    setInput(Object input, boolean seekForwardOnly, boolean ignoreMetadata)
    将输入源设置为给定的ImageInputStream或其他Object
    void
    setLocale(Locale locale)
    将此ImageReader的当前Locale设置为给定值。

    Methods declared in class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • originatingProvider

      protected ImageReaderSpi originatingProvider
      实例化此对象的ImageReaderSpi,如果其身份未知或不存在,则返回null。默认情况下,它初始化为null
    • input

      protected Object input
      setInput设置的ImageInputStream或其他Object,由getInput检索。默认情况下,它初始化为null
    • seekForwardOnly

      protected boolean seekForwardOnly
      如果通过setInput将当前输入源标记为仅允许向前搜索,则返回true。默认情况下,该值为false
      参见:
    • ignoreMetadata

      protected boolean ignoreMetadata
      如果通过setInput将当前输入源标记为允许忽略元数据,则返回true。默认情况下,该值为false
      参见:
    • minIndex

      protected int minIndex
      读取的最小有效索引,最初为0。当seekForwardOnlytrue时,各种方法可能会在尝试访问具有较低索引的图像的数据时抛出IndexOutOfBoundsException
      参见:
    • availableLocales

      protected Locale[] availableLocales
      一个Locale数组,可用于本地化警告消息,如果不支持本地化,则为null
    • locale

      protected Locale locale
      用于本地化的当前Locale,如果未设置,则为null
    • warningListeners

      protected List<IIOReadWarningListener> warningListeners
      当前注册的IIOReadWarningListenerList,默认情况下初始化为null,与空的List是同义词。
    • warningLocales

      protected List<Locale> warningLocales
      与每个当前注册的IIOReadWarningListener关联的LocaleList,默认情况下初始化为null,与空的List是同义词。
    • progressListeners

      protected List<IIOReadProgressListener> progressListeners
      当前注册的IIOReadProgressListenerList,默认情况下初始化为null,与空的List是同义词。
    • updateListeners

      protected List<IIOReadUpdateListener> updateListeners
      当前注册的IIOReadUpdateListenerList,默认情况下初始化为null,与空的List是同义词。
  • Constructor Details

    • ImageReader

      protected ImageReader(ImageReaderSpi originatingProvider)
      构造一个ImageReader并将其originatingProvider字段设置为提供的值。

      使用扩展的子类应该提供一个签名为(ImageReaderSpi,Object)的构造函数,以便检索扩展对象。如果扩展对象不合适,则应抛出IllegalArgumentException

      参数:
      originatingProvider - 调用此构造函数的ImageReaderSpi,或null
  • Method Details

    • getFormatName

      public String getFormatName() throws IOException
      返回标识输入源格式的String

      默认实现返回originatingProvider.getFormatNames()[0]。可能没有原始服务提供者的实现,或者希望使用不同的命名策略,应覆盖此方法。

      返回:
      格式名称,作为String
      抛出:
      IOException - 如果从输入源读取信息时发生错误。
    • getOriginatingProvider

      public ImageReaderSpi getOriginatingProvider()
      返回在构造函数中传递的ImageReaderSpi。请注意,此值可能为null
      返回:
      一个ImageReaderSpi,或null
      参见:
    • setInput

      public void setInput(Object input, boolean seekForwardOnly, boolean ignoreMetadata)
      将输入源设置为给定的ImageInputStream或其他Object。必须在使用任何查询或读取方法之前设置输入源。如果inputnull,则将删除任何当前设置的输入源。在任何情况下,将初始化minIndex的值为0。

      seekForwardOnly参数控制getMinIndex返回的值是否会随着每个图像(或缩略图或图像元数据)的读取而增加。如果seekForwardOnly为true,则调用read(index)将在index < this.minIndex时抛出IndexOutOfBoundsException;否则,minIndex的值将设置为index。如果seekForwardOnlyfalse,则无论读取操作如何,minIndex的值将始终保持为0。

      如果将ignoreMetadata参数设置为true,允许阅读器忽略在读取过程中遇到的任何元数据。随后对getStreamMetadatagetImageMetadata方法的调用可能返回null,并且从readAll返回的IIOImage可能从其getMetadata方法返回null。设置此参数可能使阅读器更有效地工作。阅读器可以选择忽略此设置并正常返回元数据。

      子类应注意删除基于先前流的缓存信息,例如标头信息或部分解码的图像数据。

      除了ImageInputStream之外的一般Object的使用是为了与直接与捕获设备或成像协议交互的阅读器。合法类的集合由阅读器的服务提供者的getInputTypes方法进行广告;大多数阅读器将返回一个只包含ImageInputStream.class的单元素数组,以指示它们仅接受ImageInputStream

      默认实现将input参数与originatingProvider.getInputTypes()返回的列表进行检查,并在参数不是列表中类的实例时失败。如果原始提供程序设置为null,则只有当输入为ImageInputStream时才接受。

      参数:
      input - 用于未来解码的ImageInputStream或其他Object
      seekForwardOnly - 如果为true,则只能从此输入源按升序读取图像和元数据。
      ignoreMetadata - 如果为true,则在读取过程中可以忽略元数据。
      抛出:
      IllegalArgumentException - 如果input不是由原始服务提供程序的getInputTypes方法返回的类的实例,或者不是ImageInputStream
      参见:
    • setInput

      public void setInput(Object input, boolean seekForwardOnly)
      设置要使用的输入源为给定的ImageInputStream或其他Object。必须在使用任何查询或读取方法之前设置输入源。如果inputnull,则将删除任何当前设置的输入源。在任何情况下,minIndex的值将初始化为0。

      seekForwardOnly参数控制getMinIndex返回的值是否会随着每次读取图像(或缩略图或图像元数据)而增加。如果seekForwardOnly为true,则调用read(index)将抛出IndexOutOfBoundsException,如果index < this.minIndex;否则,minIndex的值将设置为index。如果seekForwardOnlyfalse,则无论读取操作如何,minIndex的值将保持为0。

      此方法等效于setInput(input, seekForwardOnly, false)

      参数:
      input - 用于未来解码的ImageInputStream或其他Object
      seekForwardOnly - 如果为true,则只能从此输入源按升序读取图像和元数据。
      抛出:
      IllegalArgumentException - 如果input不是由原始服务提供程序的getInputTypes方法返回的类的实例,或者不是ImageInputStream
      参见:
    • setInput

      public void setInput(Object input)
      设置要使用的输入源为给定的ImageInputStream或其他Object。必须在使用任何查询或读取方法之前设置输入源。如果inputnull,则将删除任何当前设置的输入源。在任何情况下,minIndex的值将初始化为0。

      此方法等效于setInput(input, false, false)

      参数:
      input - 用于未来解码的ImageInputStream或其他Object
      抛出:
      IllegalArgumentException - 如果input不是由原始服务提供程序的getInputTypes方法返回的类的实例,或者不是ImageInputStream
      参见:
    • getInput

      public Object getInput()
      返回先前设置为输入源的ImageInputStream或其他Object。如果尚未设置输入源,则返回null
      返回:
      将用于未来解码的Object,或null
      参见:
    • isSeekForwardOnly

      public boolean isSeekForwardOnly()
      如果通过将true作为seekForwardOnly参数传递给setInput方法将当前输入源标记为仅向前查找,则返回true
      返回:
      如果输入源为仅向前查找,则返回true
      参见:
    • isIgnoringMetadata

      public boolean isIgnoringMetadata()
      如果通过将true作为ignoreMetadata参数传递给setInput方法将当前输入源标记为可忽略元数据,则返回true
      返回:
      如果可以忽略元数据,则返回true
      参见:
    • getMinIndex

      public int getMinIndex()
      返回读取图像、缩略图或图像元数据的最低有效索引。如果seekForwardOnly()false,则此值通常保持为0,表示可以进行随机访问。否则,它将包含最近访问的索引值,并以单调方式增加。
      返回:
      用于读取的最小合法索引。
    • getAvailableLocales

      public Locale[] getAvailableLocales()
      返回一个Locale数组,可用于本地化警告侦听器和压缩设置。返回null表示不支持本地化。

      如果availableLocales实例变量为非null,则默认实现将返回其克隆,否则返回null

      返回:
      可用作setLocale参数的Locale数组,或null
    • setLocale

      public void setLocale(Locale locale)
      将此ImageReader的当前Locale设置为给定值。值为null将删除任何先前的设置,并指示阅读器应根据自己的喜好进行本地化。
      参数:
      locale - 所需的Locale,或null
      抛出:
      IllegalArgumentException - 如果locale为非null,但不是getAvailableLocales返回的值之一。
      参见:
    • getLocale

      public Locale getLocale()
      返回当前设置的Locale,如果尚未设置,则返回null
      返回:
      当前的Locale,或null
      参见:
    • getNumImages

      public abstract int getNumImages(boolean allowSearch) throws IOException
      返回当前输入源中可用的图像数量,不包括缩略图。

      请注意,某些图像格式(例如动画 GIF)不指定流中存在多少图像。因此,确定图像数量将需要扫描整个流,并可能需要用于缓冲的内存。如果要按顺序处理图像,则直接调用read并逐渐增加索引,直到抛出IndexOutOfBoundsException指示没有更多图像可用可能更有效。可以将allowSearch参数设置为false,以指示不需要进行详尽搜索;返回值将为-1,以指示需要搜索。如果已将输入指定为seekForwardOnly设置为true,则如果将allowSearch设置为true,此方法将抛出IllegalStateException

      参数:
      allowSearch - 如果为true,则将返回真实的图像数量,即使需要搜索。如果为false,读者可能会返回-1而不执行搜索。
      返回:
      图像数量,作为int,如果allowSearchfalse且需要搜索,则返回-1
      抛出:
      IllegalStateException - 如果尚未设置输入源,或者如果已将输入指定为seekForwardOnly设置为true
      IOException - 如果从输入源读取信息时发生错误。
      参见:
    • getWidth

      public abstract int getWidth(int imageIndex) throws IOException
      返回输入源中给定图像的宽度(以像素为单位)。

      如果图像可以呈现为用户指定的大小,则此方法返回默认宽度。

      参数:
      imageIndex - 要查询的图像的索引。
      返回:
      图像的宽度,作为int
      抛出:
      IllegalStateException - 如果尚未设置输入源。
      IndexOutOfBoundsException - 如果提供的索引超出范围。
      IOException - 如果从输入源读取宽度信息时发生错误。
    • getHeight

      public abstract int getHeight(int imageIndex) throws IOException
      返回输入源中给定图像的高度(以像素为单位)。

      如果图像可以呈现为用户指定的大小,则此方法返回默认高度。

      参数:
      imageIndex - 要查询的图像的索引。
      返回:
      图像的高度,作为一个 int 类型。
      抛出:
      IllegalStateException - 如果未设置输入源。
      IndexOutOfBoundsException - 如果提供的索引超出范围。
      IOException - 如果从输入源读取高度信息时发生错误。
    • isRandomAccessEasy

      public boolean isRandomAccessEasy(int imageIndex) throws IOException
      返回true,如果给定图像的存储格式对像素的随机访问没有固有障碍。对于大多数压缩格式,例如JPEG,该方法应返回false,因为除了感兴趣的区域之外,可能需要解码图像的大部分部分。 ImageReadParam中指定的任意区域读取。

      false的格式可能仍允许平铺(例如JPEG中的重启标记),并且在平铺上随机访问可能会相当高效。请参见 isImageTiled

      truefalse,而无需访问任何图像数据。在这种情况下,即使未设置任何输入源或图像索引超出范围,也无需抛出异常。

      false

      参数:
      imageIndex - 要查询的图像的索引。
      返回:
      如果读取给定图像的感兴趣区域可能是高效的,则返回true
      抛出:
      IllegalStateException - 如果需要输入源来确定返回值,但未设置任何输入源。
      IndexOutOfBoundsException - 如果必须访问图像以确定返回值,但提供的索引超出范围。
      IOException - 如果在读取过程中发生错误。
    • getAspectRatio

      public float getAspectRatio(int imageIndex) throws IOException
      返回给定图像的宽度与高度之比(即其宽度除以其高度)作为float类型。对于固有可调整大小的图像,该方法提供了一种确定给定高度时适当宽度的方法,反之亦然。对于不可调整大小的图像,使用真实的宽度和高度。 (float)getWidth(imageIndex)/getHeight(imageIndex)

      参数:
      imageIndex - 要查询的图像的索引。
      返回:
      表示给定图像的宽高比的float
      抛出:
      IllegalStateException - 如果未设置输入源。
      IndexOutOfBoundsException - 如果提供的索引超出范围。
      IOException - 如果在读取过程中发生错误。
    • getRawImageType

      public ImageTypeSpecifier getRawImageType(int imageIndex) throws IOException
      返回一个ImageTypeSpecifier,指示最接近表示图像的“原始”内部格式的SampleModelColorModel。如果没有接近的匹配,则应返回保留图像中最多信息的类型。返回值还应包含在getImageTypes返回的值列表中。 getImageType提供的列表中的第一个条目。

      参数:
      imageIndex - 要查询的图像的索引。
      返回:
      一个ImageTypeSpecifier
      抛出:
      IllegalStateException - 如果未设置输入源。
      IndexOutOfBoundsException - 如果提供的索引超出范围。
      IOException - 如果从输入源读取格式信息时发生错误。
    • getImageTypes

      public abstract Iterator<ImageTypeSpecifier> getImageTypes(int imageIndex) throws IOException
      返回一个包含可能用于解码给定图像的图像类型ImageTypeSpecifiersIterator。至少会返回一个合法的图像类型。

      参数:
      imageIndex - 要检索的图像的索引。
      返回:
      包含至少一个建议的用于解码当前给定图像的图像类型ImageTypeSpecifierIterator
      抛出:
      IllegalStateException - 如果未设置输入源。
      IndexOutOfBoundsException - 如果提供的索引超出范围。
      IOException - 如果从输入源读取格式信息时发生错误。
      参见:
    • getDefaultReadParam

      public ImageReadParam getDefaultReadParam()
      返回适用于该格式的默认ImageReadParam对象。所有子类应为所有参数定义一组默认值,并在此调用时返回它们。可以在设置输入源之前调用此方法。 ImageReadParam对象,不允许源缩放(即,返回 new ImageReadParam()

      返回:
      一个ImageReadParam对象,可用于使用一组默认设置控制解码过程。
    • getStreamMetadata

      public abstract IIOMetadata getStreamMetadata() throws IOException
      返回一个表示与输入源整体关联的元数据的IIOMetadata对象(即,不与任何特定图像关联),如果读取器不支持读取元数据,设置为忽略元数据,或者没有可用的元数据,则返回null
      返回:
      一个IIOMetadata对象,或null
      抛出:
      IOException - 如果在读取过程中发生错误。
    • getStreamMetadata

      public IIOMetadata getStreamMetadata(String formatName, Set<String> nodeNames) throws IOException
      返回一个表示与给定图像关联的元数据的IIOMetadata对象,如果读取器不支持读取元数据,设置为忽略元数据,或者没有可用的元数据,则返回null formatName命名的格式返回文档。在返回的任何文档中,只有成员为 nodeNames的节点是必须返回的。通过这种方式,根据实际需要的信息,可以将读取器的元数据处理量保持在最小限度内。

      formatName不是受支持的元数据格式的名称,则返回 null

      getStreamMetadata()的结果,之后检查格式名称是否受支持。如果不受支持,则返回 null

      参数:
      formatName - 用于从返回的IIOMetadata对象中检索文档的元数据格式名称。
      nodeNames - 包含可能包含在检索的文档中的节点名称的Set
      返回:
      一个IIOMetadata对象,或null
      抛出:
      IllegalArgumentException - 如果formatNamenull
      IllegalArgumentException - 如果nodeNamesnull
      IOException - 如果在读取过程中发生错误。
    • getImageMetadata

      public abstract IIOMetadata getImageMetadata(int imageIndex) throws IOException
      返回一个包含与给定图像关联的元数据的IIOMetadata对象,如果读取器不支持读取元数据,设置为忽略元数据,或者没有可用的元数据,则返回null
      参数:
      imageIndex - 要检索其元数据的图像的索引。
      返回:
      一个IIOMetadata对象,或null
      抛出:
      IllegalStateException - 如果未设置输入源。
      IndexOutOfBoundsException - 如果提供的索引超出范围。
      IOException - 如果在读取过程中发生错误。
    • getImageMetadata

      public IIOMetadata getImageMetadata(int imageIndex, String formatName, Set<String> nodeNames) throws IOException
      返回一个表示给定图像关联的元数据的IIOMetadata对象,如果阅读器不支持读取元数据或没有可用的元数据,则返回null

      生成的元数据对象仅负责以formatName命名的格式返回文档。在返回的任何文档中,只有成员为nodeNames的节点是必须返回的。通过这种方式,根据实际需要的信息,可以将阅读器的元数据处理量保持在最低限度。

      如果formatName不是受支持的元数据格式的名称,则可能返回null

      在所有情况下,返回比严格必要的更强大的元数据对象是合法的。格式名称和节点名称仅是可用于减少阅读器工作量的提示。

      默认实现只是在检查支持的格式名称后返回调用getImageMetadata(imageIndex)的结果。如果不支持,则返回null

      参数:
      imageIndex - 要检索其元数据的图像的索引。
      formatName - 用于从返回的IIOMetadata对象中检索文档的元数据格式名称。
      nodeNames - 包含可能包含在检索的文档中的节点名称的Set
      返回:
      一个IIOMetadata对象,或null
      抛出:
      IllegalStateException - 如果未设置输入源。
      IndexOutOfBoundsException - 如果提供的索引超出范围。
      IllegalArgumentException - 如果formatNamenull
      IllegalArgumentException - 如果nodeNamesnull
      IOException - 如果在读取过程中发生错误。
    • read

      public BufferedImage read(int imageIndex) throws IOException
      读取由imageIndex索引的图像,并使用默认的ImageReadParam将其作为完整的BufferedImage返回。这是一个方便的方法,调用read(imageIndex, null)

      返回的图像将根据从getImageTypes返回的第一个ImageTypeSpecifier进行格式化。

      任何注册的IIOReadProgressListener对象将通过调用其imageStarted方法进行通知,随后在读取过程中调用其imageProgress方法。最后将调用其imageComplete方法。在读取过程中,IIOReadUpdateListener对象可能会在其他时间更新,因为像素被解码。最后,IIOReadWarningListener对象将在解码过程中发生任何非致命警告时收到通知。

      参数:
      imageIndex - 要检索的图像的索引。
      返回:
      作为BufferedImage的所需图像部分。
      抛出:
      IllegalStateException - 如果未设置输入源。
      IndexOutOfBoundsException - 如果提供的索引超出范围。
      IOException - 如果在读取过程中发生错误。
    • read

      public abstract BufferedImage read(int imageIndex, ImageReadParam param) throws IOException
      读取由imageIndex索引的图像,并使用提供的ImageReadParam将其作为完整的BufferedImage返回。

      实际返回的BufferedImage将根据getDestination方法定义的算法选择。

      任何注册的IIOReadProgressListener对象将通过调用其imageStarted方法进行通知,随后在读取过程中调用其imageProgress方法。最后将调用其imageComplete方法。在读取过程中,IIOReadUpdateListener对象可能会在其他时间更新,因为像素被解码。最后,IIOReadWarningListener对象将在解码过程中发生任何非致命警告时收到通知。

      要读取的源波段和要写入的目标波段集是通过调用提供的ImageReadParam上的getSourceBandsgetDestinationBands来确定的。如果这些方法返回的数组的长度不同,源波段集包含大于最大可用源索引的索引,或目标波段集包含大于最大合法目标索引的索引,则会抛出IllegalArgumentException

      如果提供的ImageReadParam包含此阅读器不支持的可选设置值(例如源渲染大小或任何特定于格式的设置),则这些值将被忽略。

      参数:
      imageIndex - 要检索的图像的索引。
      param - 用于控制读取过程的ImageReadParam,或null
      返回:
      作为BufferedImage的所需图像部分。
      抛出:
      IllegalStateException - 如果未设置输入源。
      IndexOutOfBoundsException - 如果提供的索引超出范围。
      IllegalArgumentException - 如果由param.getSourceBandsparam.getDestinationBands指定的源和目标波段集在长度上不同或包含超出范围的索引。
      IllegalArgumentException - 如果生成的图像的宽度或高度小于1。
      IOException - 如果在读取过程中发生错误。
    • readAll

      public IIOImage readAll(int imageIndex, ImageReadParam param) throws IOException
      读取由imageIndex索引的图像,并使用提供的ImageReadParam将其作为包含图像、缩略图和关联图像元数据的IIOImage返回。

      由返回的IIOImage引用的实际BufferedImage将根据getDestination方法定义的算法选择。

      任何注册的IIOReadProgressListener对象将通过调用其imageStarted方法进行通知,随后在读取过程中调用其imageProgress方法。最后将调用其imageComplete方法。在读取过程中,IIOReadUpdateListener对象可能会在其他时间更新,因为像素被解码。最后,IIOReadWarningListener对象将在解码过程中发生任何非致命警告时收到通知。

      要读取的源波段和要写入的目标波段集是通过调用提供的ImageReadParam上的getSourceBandsgetDestinationBands来确定的。如果这些方法返回的数组的长度不同,源波段集包含大于最大可用源索引的索引,或目标波段集包含大于最大合法目标索引的索引,则会抛出IllegalArgumentException

      无论区域设置如何,缩略图将完整返回。

      如果提供的ImageReadParam包含此阅读器不支持的可选设置值(例如源渲染大小或任何特定于格式的设置),这些值将被忽略。

      参数:
      imageIndex - 要检索的图像的索引。
      param - 用于控制读取过程的ImageReadParam,或null
      返回:
      包含所需图像部分、一组缩略图和关联图像元数据的IIOImage
      抛出:
      IllegalStateException - 如果未设置输入源。
      IndexOutOfBoundsException - 如果提供的索引超出范围。
      IllegalArgumentException - 如果由param.getSourceBandsparam.getDestinationBands指定的源和目标波段集在长度上不同或包含超出范围的索引。
      IllegalArgumentException - 如果生成的图像的宽度或高度小于1。
      IOException - 如果在读取过程中发生错误。
    • readAll

      public Iterator<IIOImage> readAll(Iterator<? extends ImageReadParam> params) throws IOException
      返回一个包含所有图像、缩略图和元数据的Iterator,从输入源的索引开始,索引由getMinIndex给出,以IIOImage对象的形式返回。提供了一个包含ImageReadParam对象的Iterator;每从输入源读取一个图像,就会消耗一个元素,直到没有更多图像可用为止。如果读取参数Iterator用尽,但输入源仍有更多图像可用,则对剩余图像使用默认读取参数。

      如果paramsnull,则所有图像将使用默认读取参数。

      由返回的IIOImage引用的实际BufferedImage将使用getDestination方法定义的算法选择。

      任何注册的IIOReadProgressListener对象将通过调用它们的sequenceStarted方法进行通知。然后,对于每个解码的图像,将调用imageStarted,随着读取的进行,将调用imageProgress,最后调用imageComplete。在最后一个图像解码后,将调用sequenceComplete方法。在读取过程中,IIOReadUpdateListener对象可能在其他时间更新,因为像素被解码。最后,IIOReadWarningListener对象将在解码过程中接收到任何非致命警告的通知。

      要读取的源波段和要写入的目标波段集由在提供的ImageReadParam上调用getSourceBandsgetDestinationBands来确定。如果这些方法返回的数组的长度不同,源波段集包含一个大于最大可用源索引的索引,或目标波段集包含一个大于最大合法目标索引的索引,则会抛出IllegalArgumentException

      无论区域设置如何,缩略图都将完整返回。

      如果任何提供的ImageReadParam包含此阅读器不支持的可选设置值(例如源渲染大小或任何特定于格式的设置),它们将被忽略。

      参数:
      params - 包含ImageReadParam对象的Iterator
      返回:
      代表输入源内容的IIOImageIterator
      抛出:
      IllegalStateException - 如果未设置输入源。
      IllegalArgumentException - 如果params的任何非null元素不是ImageReadParam
      IllegalArgumentException - 如果由param.getSourceBandsparam.getDestinationBands指定的源和目标波段集的长度不同或包含超出范围的索引。
      IllegalArgumentException - 如果生成的图像的宽度或高度小于1。
      IOException - 如果在读取过程中发生错误。
      参见:
    • canReadRaster

      public boolean canReadRaster()
      如果此插件支持仅读取像素数据的Raster,则返回true。如果此方法返回false,则对readRasterreadTileRaster的调用将抛出UnsupportedOperationException异常。

      默认实现返回false

      返回:
      如果此插件支持读取原始Raster,则返回true
      参见:
    • readRaster

      public Raster readRaster(int imageIndex, ImageReadParam param) throws IOException
      返回一个包含来自图像流的原始像素数据的新Raster对象,不应用任何颜色转换。应用程序必须通过其他方式确定如何解释像素数据。提供的ImageReadParam对象中的任何目标或图像类型参数都将被忽略,但所有其他参数将与read方法中完全相同,除了任何目标偏移量将用作逻辑偏移而不是物理偏移。返回的Raster的大小始终为裁剪到实际图像的源区域的大小。流本身中的逻辑偏移将被忽略。

      此方法允许通常应用颜色转换的格式(例如JPEG)和通常没有关联色彩空间的格式(例如遥感或医学成像数据)提供对原始像素数据的访问。

      任何注册的readUpdateListener都将被忽略,因为没有BufferedImage,但所有其他监听器将与read方法完全相同。

      如果canReadRaster()返回false,此方法将抛出UnsupportedOperationException异常。

      如果提供的ImageReadParam包含此阅读器不支持的可选设置值(例如源渲染大小或任何特定于格式的设置),它们将被忽略。

      默认实现会抛出UnsupportedOperationException异常。

      参数:
      imageIndex - 要读取的图像的索引。
      param - 用于控制读取过程的ImageReadParam,或null
      返回:
      作为Raster的图像的所需部分。
      抛出:
      UnsupportedOperationException - 如果此插件不支持读取原始Raster
      IllegalStateException - 如果未设置输入源。
      IndexOutOfBoundsException - 如果提供的索引超出范围。
      IOException - 如果在读取过程中发生错误。
      参见:
    • isImageTiled

      public boolean isImageTiled(int imageIndex) throws IOException
      如果图像被组织成瓦片,即大小相等且不重叠的矩形,则返回true

      读取器插件可以选择是否公开存储的图像中存在的平铺。甚至可以选择在没有明确存在平铺的情况下宣传平铺。一般来说,只有在访问单个瓦片有某种优势(速度或空间)时,才应该宣传平铺。无论读取器是否宣传平铺,它必须能够读取由ImageReadParam中指定的任意矩形区域。

      如果所有图像都保证是平铺的读取器,或者保证不是平铺的读取器,可以在不访问任何图像数据的情况下分别返回truefalse。在这种情况下,即使未设置任何输入源或图像索引超出范围,也不必抛出异常。

      默认实现只返回false

      参数:
      imageIndex - 要查询的图像的索引。
      返回:
      如果图像是平铺的,则返回true
      抛出:
      IllegalStateException - 如果需要输入源来确定返回值,但未设置任何输入源。
      IndexOutOfBoundsException - 如果必须访问图像才能确定返回值,但提供的索引超出范围。
      IOException - 如果在读取过程中发生错误。
    • getTileWidth

      public int getTileWidth(int imageIndex) throws IOException
      返回给定图像中瓦片的宽度。

      默认实现简单地返回getWidth(imageIndex),这对于非平铺图像是正确的。支持平铺的读取器应该覆盖此方法。

      参数:
      imageIndex - 要查询的图像的索引。
      返回:
      瓦片的宽度。
      抛出:
      IllegalStateException - 如果未设置输入源。
      IndexOutOfBoundsException - 如果提供的索引超出范围。
      IOException - 如果在读取过程中发生错误。
    • getTileHeight

      public int getTileHeight(int imageIndex) throws IOException
      返回给定图像中瓦片的高度。

      默认实现简单地返回getHeight(imageIndex),这对于非平铺图像是正确的。支持平铺的读取器应该覆盖此方法。

      参数:
      imageIndex - 要查询的图像的索引。
      返回:
      瓦片的高度。
      抛出:
      IllegalStateException - 如果未设置输入源。
      IndexOutOfBoundsException - 如果提供的索引超出范围。
      IOException - 读取过程中发生错误。
    • getTileGridXOffset

      public int getTileGridXOffset(int imageIndex) throws IOException
      返回给定图像中瓦片(0, 0)的左上角的X坐标。

      对于瓦片网格X偏移始终具有相同值(通常为0)的读取器,可以在不访问任何图像数据的情况下返回该值。在这种情况下,即使未设置任何输入源或图像索引超出范围,也无需抛出异常。

      默认实现只返回0,这对于非平铺图像和大多数格式中的平铺图像是正确的。支持具有非(0, 0)偏移的平铺的读取器应该重写此方法。

      参数:
      imageIndex - 要查询的图像的索引。
      返回:
      瓦片网格的X偏移。
      抛出:
      IllegalStateException - 如果需要输入源来确定返回值,但未设置任何输入源。
      IndexOutOfBoundsException - 如果必须访问图像才能确定返回值,但提供的索引超出范围。
      IOException - 读取过程中发生错误。
    • getTileGridYOffset

      public int getTileGridYOffset(int imageIndex) throws IOException
      返回给定图像中瓦片(0, 0)的左上角的Y坐标。

      对于瓦片网格Y偏移始终具有相同值(通常为0)的读取器,可以在不访问任何图像数据的情况下返回该值。在这种情况下,即使未设置任何输入源或图像索引超出范围,也无需抛出异常。

      默认实现只返回0,这对于非平铺图像和大多数格式中的平铺图像是正确的。支持具有非(0, 0)偏移的平铺的读取器应该重写此方法。

      参数:
      imageIndex - 要查询的图像的索引。
      返回:
      瓦片网格的Y偏移。
      抛出:
      IllegalStateException - 如果需要输入源来确定返回值,但未设置任何输入源。
      IndexOutOfBoundsException - 如果必须访问图像才能确定返回值,但提供的索引超出范围。
      IOException - 读取过程中发生错误。
    • readTile

      public BufferedImage readTile(int imageIndex, int tileX, int tileY) throws IOException
      读取由tileXtileY参数指示的瓦片,并将其作为BufferedImage返回。如果参数超出范围,则抛出IllegalArgumentException。如果图像未平铺,则值0, 0将返回整个图像;任何其他值将导致抛出IllegalArgumentException

      此方法仅是一种方便,相当于使用指定源区域的读取参数调用read(int, ImageReadParam),该源区域具有tileX*getTileWidth(imageIndex)tileY*getTileHeight(imageIndex)的偏移量和getTileWidth(imageIndex)getTileHeight(imageIndex)的宽度和高度;以及子采样因子为1和偏移量为0。要对瓦片进行子采样,请使用具有指定区域和不同子采样参数的读取参数调用read

      默认实现如果tileXtileY为0,则返回整个图像,否则抛出IllegalArgumentException

      参数:
      imageIndex - 要检索的图像的索引。
      tileX - 要检索的瓦片的列索引(从0开始)。
      tileY - 要检索的瓦片的行索引(从0开始)。
      返回:
      作为BufferedImage的瓦片。
      抛出:
      IllegalStateException - 如果未设置输入源。
      IndexOutOfBoundsException - 如果imageIndex超出范围。
      IllegalArgumentException - 如果瓦片索引超出范围。
      IOException - 读取过程中发生错误。
    • readTileRaster

      public Raster readTileRaster(int imageIndex, int tileX, int tileY) throws IOException
      返回一个包含来自瓦片的原始像素数据的Raster对象,没有应用任何颜色转换。应用程序必须通过其他方式确定如何解释像素数据。

      如果canReadRaster()返回false,此方法将抛出UnsupportedOperationException

      默认实现检查是否支持读取Raster,如果支持,则在tileXtileY为0时调用readRaster(imageIndex, null),否则抛出IllegalArgumentException

      参数:
      imageIndex - 要检索的图像的索引。
      tileX - 要检索的瓦片的列索引(从0开始)。
      tileY - 要检索的瓦片的行索引(从0开始)。
      返回:
      作为Raster的瓦片。
      抛出:
      UnsupportedOperationException - 如果此插件不支持读取原始Raster
      IllegalArgumentException - 如果瓦片索引超出范围。
      IllegalStateException - 如果未设置输入源。
      IndexOutOfBoundsException - 如果imageIndex超出范围。
      IOException - 读取过程中发生错误。
      参见:
    • readAsRenderedImage

      public RenderedImage readAsRenderedImage(int imageIndex, ImageReadParam param) throws IOException
      返回一个包含由imageIndex索引的图像内容的RenderedImage对象。默认情况下,返回的图像只是由read(imageIndex, param)返回的BufferedImage

      此方法的语义可能与其他read方法的语义在几个方面不同。首先,可能会忽略ImageReadParam中设置的任何目标图像和/或图像类型。其次,不能保证会进行通常的监听器调用,或者如果进行了调用,它们可能没有意义。这是因为返回的图像可能在返回时或实际上在任何时间都没有完全填充像素数据。

      如果提供的ImageReadParam包含此读取器不支持的可选设置值(例如源渲染大小或任何特定于格式的设置),它们将被忽略。

      默认实现只是调用read(imageIndex, param)

      参数:
      imageIndex - 要检索的图像的索引。
      param - 用于控制读取过程的ImageReadParam,或null
      返回:
      提供图像视图的RenderedImage对象。
      抛出:
      IllegalStateException - 如果未设置输入源。
      IndexOutOfBoundsException - 如果提供的索引超出范围。
      IllegalArgumentException - 如果由param.getSourceBandsparam.getDestinationBands指定的源和目标波段集合长度不同或包含超出范围的索引。
      IllegalArgumentException - 如果生成的图像的宽度或高度小于1。
      IOException - 读取过程中发生错误。
    • readerSupportsThumbnails

      public boolean readerSupportsThumbnails()
      如果此读取器理解的图像格式支持与其关联的缩略图预览图像,则返回true。默认实现返回false

      如果此方法返回false,则hasThumbnailsgetNumThumbnails将分别返回false0,而readThumbnail将抛出UnsupportedOperationException,无论其参数如何。

      不支持缩略图的读取器无需实现任何与缩略图相关的方法。

      返回:
      如果支持缩略图,则返回true
    • hasThumbnails

      public boolean hasThumbnails(int imageIndex) throws IOException
      返回true,如果给定的图像具有与之关联的缩略图预览图像。如果格式不支持缩略图(readerSupportsThumbnails返回false),则无论是否设置了输入源或imageIndex是否在范围内,都将返回false

      默认实现在getNumThumbnails返回大于0的值时返回true

      参数:
      imageIndex - 要查询的图像的索引。
      返回:
      如果给定的图像具有缩略图,则返回true
      抛出:
      IllegalStateException - 如果读取器支持缩略图但未设置输入源。
      IndexOutOfBoundsException - 如果读取器支持缩略图但imageIndex超出范围。
      IOException - 如果在读取过程中发生错误。
    • getNumThumbnails

      public int getNumThumbnails(int imageIndex) throws IOException
      返回与给定图像关联的缩略图预览图像的数量。如果格式不支持缩略图(readerSupportsThumbnails返回false),则无论是否设置了输入源或imageIndex是否在范围内,都将返回0

      默认实现在不检查其参数的情况下返回0。

      参数:
      imageIndex - 要查询的图像的索引。
      返回:
      与给定图像关联的缩略图的数量。
      抛出:
      IllegalStateException - 如果读取器支持缩略图但未设置输入源。
      IndexOutOfBoundsException - 如果读取器支持缩略图但imageIndex超出范围。
      IOException - 如果在读取过程中发生错误。
    • getThumbnailWidth

      public int getThumbnailWidth(int imageIndex, int thumbnailIndex) throws IOException
      返回由thumbnailIndex索引的与由ImageIndex索引的图像关联的缩略图预览图像的宽度。

      如果读取器不支持缩略图(readerSupportsThumbnails返回false),将抛出UnsupportedOperationException

      默认实现简单地返回readThumbnail(imageindex, thumbnailIndex).getWidth()。因此,子类应尽可能重写此方法,以避免强制读取缩略图。

      参数:
      imageIndex - 要检索的图像的索引。
      thumbnailIndex - 要检索的缩略图的索引。
      返回:
      所需缩略图的宽度,作为int
      抛出:
      UnsupportedOperationException - 如果不支持缩略图。
      IllegalStateException - 如果未设置输入源。
      IndexOutOfBoundsException - 如果提供的索引中有任何一个超出范围。
      IOException - 如果在读取过程中发生错误。
    • getThumbnailHeight

      public int getThumbnailHeight(int imageIndex, int thumbnailIndex) throws IOException
      返回由thumbnailIndex索引的与由ImageIndex索引的图像关联的缩略图预览图像的高度。

      如果读取器不支持缩略图(readerSupportsThumbnails返回false),将抛出UnsupportedOperationException

      默认实现简单地返回readThumbnail(imageindex, thumbnailIndex).getHeight()。因此,子类应尽可能重写此方法,以避免强制读取缩略图。

      参数:
      imageIndex - 要检索的图像的索引。
      thumbnailIndex - 要检索的缩略图的索引。
      返回:
      所需缩略图的高度,作为int
      抛出:
      UnsupportedOperationException - 如果不支持缩略图。
      IllegalStateException - 如果未设置输入源。
      IndexOutOfBoundsException - 如果提供的索引中有任何一个超出范围。
      IOException - 如果在读取过程中发生错误。
    • readThumbnail

      public BufferedImage readThumbnail(int imageIndex, int thumbnailIndex) throws IOException
      返回由thumbnailIndex索引的与由ImageIndex索引的图像关联的缩略图预览图像作为BufferedImage

      通过调用它们的thumbnailStartedthumbnailProgressthumbnailComplete方法,任何已注册的IIOReadProgressListener对象都将收到通知。

      如果读取器不支持缩略图(readerSupportsThumbnails返回false),无论是否设置了输入源或索引是否在范围内,都将抛出UnsupportedOperationException

      默认实现会抛出UnsupportedOperationException

      参数:
      imageIndex - 要检索的图像的索引。
      thumbnailIndex - 要检索的缩略图的索引。
      返回:
      所需缩略图作为BufferedImage
      抛出:
      UnsupportedOperationException - 如果不支持缩略图。
      IllegalStateException - 如果未设置输入源。
      IndexOutOfBoundsException - 如果提供的索引中有任何一个超出范围。
      IOException - 如果在读取过程中发生错误。
    • abort

      public void abort()
      请求中止任何当前的读取操作。中止后的图像内容将是未定义的。

      读取器应在每次读取操作开始时调用clearAbortRequest,并在读取过程中定期轮询abortRequested的值。

    • abortRequested

      protected boolean abortRequested()
      如果自读取器实例化以来或调用clearAbortRequest以来已发出中止当前读取操作的请求,则返回true
      返回:
      如果应中止当前读取操作,则返回true
      参见:
    • clearAbortRequest

      protected void clearAbortRequest()
      清除任何先前的中止请求。调用此方法后,abortRequested将返回false
      参见:
    • addIIOReadWarningListener

      public void addIIOReadWarningListener(IIOReadWarningListener listener)
      将一个IIOReadWarningListener添加到已注册的警告侦听器列表中。如果listenernull,则不会抛出异常,也不会执行任何操作。发送到给定侦听器的消息将在可能的情况下本地化,以匹配当前的Locale。如果未设置Locale,则警告消息可能会根据读取器的选择进行本地化。
      参数:
      listener - 要注册的IIOReadWarningListener
      参见:
    • removeIIOReadWarningListener

      public void removeIIOReadWarningListener(IIOReadWarningListener listener)
      从已注册的错误侦听器列表中删除一个IIOReadWarningListener。如果侦听器以前未注册,或者listenernull,则不会抛出异常,也不会执行任何操作。
      参数:
      listener - 要取消注册的IIOReadWarningListener
      参见:
    • removeAllIIOReadWarningListeners

      public void removeAllIIOReadWarningListeners()
      删除当前所有已注册的IIOReadWarningListener对象。

      默认实现将warningListenerswarningLocales实例变量设置为null

    • addIIOReadProgressListener

      public void addIIOReadProgressListener(IIOReadProgressListener listener)
      将一个IIOReadProgressListener添加到已注册的进度侦听器列表中。如果listenernull,则不会抛出异常,也不会执行任何操作。
      参数:
      listener - 要注册的IIOReadProgressListener
      参见:
    • removeIIOReadProgressListener

      public void removeIIOReadProgressListener(IIOReadProgressListener listener)
      从已注册的进度侦听器列表中删除一个IIOReadProgressListener。如果侦听器以前未注册,或者listenernull,则不会抛出异常,也不会执行任何操作。
      参数:
      listener - 要取消注册的IIOReadProgressListener。
      参见:
    • removeAllIIOReadProgressListeners

      public void removeAllIIOReadProgressListeners()
      移除所有当前注册的IIOReadProgressListener对象。

      默认实现将progressListeners实例变量设置为null

    • addIIOReadUpdateListener

      public void addIIOReadUpdateListener(IIOReadUpdateListener listener)
      将一个IIOReadUpdateListener添加到已注册的更新监听器列表中。如果listenernull,则不会抛出异常,也不会执行任何操作。监听器将在解码图像和缩略图时接收像素更新的通知,包括渐进式传输的开始和结束。

      如果没有更新监听器存在,阅读器可能选择对目标图像和/或缩略图的像素执行较少的更新,这可能导致更高效的解码。

      例如,在渐进式JPEG解码中,每个传输包含对一组系数的更新,如果存在监听器,则每个传输都必须将系数转换为像素值,并转换为RGB颜色空间。如果没有监听器存在,则可以简单地累积系数,并且最终结果只需转换和颜色转换一次。

      解码的最终结果无论是否执行中间更新都将相同。因此,如果只需要最终图像,则最好不要注册任何IIOReadUpdateListener。通常,在通过与本地CPU处理相比非常缓慢的网络连接上获取图像时,渐进式更新最为有效;在快速连接上,渐进式更新实际上可能会减慢图像的呈现速度。

      参数:
      listener - 要注册的IIOReadUpdateListener。
      参见:
    • removeIIOReadUpdateListener

      public void removeIIOReadUpdateListener(IIOReadUpdateListener listener)
      从已注册的更新监听器列表中移除一个IIOReadUpdateListener。如果监听器先前未注册,或者listenernull,则不会抛出异常,也不会执行任何操作。
      参数:
      listener - 要取消注册的IIOReadUpdateListener。
      参见:
    • removeAllIIOReadUpdateListeners

      public void removeAllIIOReadUpdateListeners()
      移除所有当前注册的IIOReadUpdateListener对象。

      默认实现将updateListeners实例变量设置为null

    • processSequenceStarted

      protected void processSequenceStarted(int minIndex)
      通过调用它们的sequenceStarted方法向所有注册的IIOReadProgressListener广播图像读取序列的开始。子类可以将此方法用作便利。
      参数:
      minIndex - 正在读取的最低索引。
    • processSequenceComplete

      protected void processSequenceComplete()
      通过调用它们的sequenceComplete方法向所有注册的IIOReadProgressListener广播图像读取序列的完成。子类可以将此方法用作便利。
    • processImageStarted

      protected void processImageStarted(int imageIndex)
      通过调用它们的imageStarted方法向所有注册的IIOReadProgressListener广播图像读取的开始。子类可以将此方法用作便利。
      参数:
      imageIndex - 即将读取的图像的索引。
    • processImageProgress

      protected void processImageProgress(float percentageDone)
      通过调用它们的imageProgress方法向所有注册的IIOReadProgressListener广播图像完成的当前百分比。子类可以将此方法用作便利。
      参数:
      percentageDone - 当前完成百分比,作为float
    • processImageComplete

      protected void processImageComplete()
      通过调用它们的imageComplete方法向所有注册的IIOReadProgressListener广播图像读取的完成。子类可以将此方法用作便利。
    • processThumbnailStarted

      protected void processThumbnailStarted(int imageIndex, int thumbnailIndex)
      通过调用它们的thumbnailStarted方法向所有注册的IIOReadProgressListener广播缩略图读取的开始。子类可以将此方法用作便利。
      参数:
      imageIndex - 与缩略图关联的图像的索引。
      thumbnailIndex - 缩略图的索引。
    • processThumbnailProgress

      protected void processThumbnailProgress(float percentageDone)
      通过调用它们的thumbnailProgress方法向所有注册的IIOReadProgressListener广播缩略图完成的当前百分比。子类可以将此方法用作便利。
      参数:
      percentageDone - 当前完成百分比,作为float
    • processThumbnailComplete

      protected void processThumbnailComplete()
      通过调用它们的thumbnailComplete方法向所有注册的IIOReadProgressListener广播缩略图读取的完成。子类可以将此方法用作便利。
    • processReadAborted

      protected void processReadAborted()
      通过调用它们的readAborted方法向所有注册的IIOReadProgressListener广播读取已中止。子类可以将此方法用作便利。
    • processPassStarted

      protected void processPassStarted(BufferedImage theImage, int pass, int minPass, int maxPass, int minX, int minY, int periodX, int periodY, int[] bands)
      通过调用它们的passStarted方法向所有注册的IIOReadUpdateListener广播渐进式传输的开始。子类可以将此方法用作便利。
      参数:
      theImage - 正在更新的BufferedImage
      pass - 当前传输的索引,从0开始。
      minPass - 将要解码的第一个传输的索引。
      maxPass - 将要解码的最后一个传输的索引。
      minX - 包含在传输中的左上角像素的X坐标。
      minY - 包含在传输中的左上角像素的Y坐标。
      periodX - 像素之间的水平间隔。
      periodY - 像素之间的垂直间隔。
      bands - 一个表示目标受影响波段集的int数组。
    • processImageUpdate

      protected void processImageUpdate(BufferedImage theImage, int minX, int minY, int width, int height, int periodX, int periodY, int[] bands)
      通过调用它们的imageUpdate方法向所有注册的IIOReadUpdateListener广播一组样本的更新。子类可以将此方法用作便利。
      参数:
      theImage - 正在更新的BufferedImage
      minX - 包含在传输中的左上角像素的X坐标。
      minY - 包含在传输中的左上角像素的Y坐标。
      width - 正在更新的区域的总宽度,包括如果periodX > 1则跳过的像素。
      height - 正在更新的区域的总高度,包括如果periodY > 1则跳过的像素。
      periodX - 像素之间的水平间隔。
      periodY - 像素之间的垂直间隔。
      bands - 一个表示目标受影响波段集的int数组。
    • processPassComplete

      protected void processPassComplete(BufferedImage theImage)
      通过调用它们的passComplete方法向所有注册的IIOReadUpdateListener广播渐进式传输的结束。子类可以将此方法用作便利。
      参数:
      theImage - 正在更新的BufferedImage
    • processThumbnailPassStarted

      protected void processThumbnailPassStarted(BufferedImage theThumbnail, int pass, int minPass, int maxPass, int minX, int minY, int periodX, int periodY, int[] bands)
      通过调用它们的thumbnailPassStarted方法向所有注册的IIOReadUpdateListener广播缩略图渐进式传输的开始。子类可以将此方法用作便利。
      参数:
      theThumbnail - 正在更新的BufferedImage缩略图。
      pass - 当前传输的索引,从0开始。
      minPass - 将要解码的第一个传输的索引。
      maxPass - 将要解码的最后一个传输的索引。
      minX - 包含在传输中的左上角像素的X坐标。
      minY - 包含在传输中的左上角像素的Y坐标。
      periodX - 像素之间的水平间隔。
      periodY - 像素之间的垂直间隔。
      bands - 一个表示目标受影响波段集的int数组。
    • processThumbnailUpdate

      protected void processThumbnailUpdate(BufferedImage theThumbnail, int minX, int minY, int width, int height, int periodX, int periodY, int[] bands)
      通过调用它们的thumbnailUpdate方法向所有注册的IIOReadUpdateListener广播缩略图图像的一组样本的更新。子类可以将此方法用作便利。
      参数:
      theThumbnail - 正在更新的BufferedImage缩略图。
      minX - 包含在传输中的左上角像素的X坐标。
      minY - 包含在传输中的左上角像素的Y坐标。
      width - 正在更新的区域的总宽度,包括如果periodX > 1则跳过的像素。
      height - 正在更新的区域的总高度,包括如果periodY > 1则跳过的像素。
      periodX - 像素之间的水平间隔。
      periodY - 像素之间的垂直间隔。
      bands - 一个表示目标受影响波段集的int数组。
    • processThumbnailPassComplete

      protected void processThumbnailPassComplete(BufferedImage theThumbnail)
      通过调用它们的thumbnailPassComplete方法向所有注册的IIOReadUpdateListener广播缩略图渐进式传输的结束。子类可以将此方法用作便利。
      参数:
      theThumbnail - 正在更新的BufferedImage缩略图。
    • processWarningOccurred

      protected void processWarningOccurred(String warning)
      通过调用它们的warningOccurred方法向所有注册的IIOReadWarningListener广播警告消息。子类可以将此方法用作便利。
      参数:
      warning - 要发送的警告消息。
      抛出:
      IllegalArgumentException - 如果warningnull
    • processWarningOccurred

      protected void processWarningOccurred(String baseName, String keyword)
      通过从ResourceBundle中获取的字符串调用它们的warningOccurred方法,向所有注册的IIOReadWarningListener广播本地化的警告消息。子类可以使用此方法作为一种便利。
      参数:
      baseName - 包含本地化警告消息的一组ResourceBundle的基本名称。
      keyword - 用于在ResourceBundle集合中索引警告消息的关键字。
      抛出:
      IllegalArgumentException - 如果baseNamenull
      IllegalArgumentException - 如果keywordnull
      IllegalArgumentException - 如果找不到适当的ResourceBundle
      IllegalArgumentException - 如果在定位的ResourceBundle中找不到命名资源。
      IllegalArgumentException - 如果从ResourceBundle中检索的对象不是String
    • reset

      public void reset()
      ImageReader恢复到其初始状态。

      默认实现调用setInput(null, false)setLocale(null)removeAllIIOReadUpdateListeners()removeAllIIOReadWarningListeners()removeAllIIOReadProgressListeners()clearAbortRequest

    • dispose

      public void dispose()
      允许释放此对象持有的任何资源。在调用此方法后调用任何其他方法(除了finalize)的结果是未定义的。

      应用程序在知道不再使用此ImageReader时调用此方法非常重要。否则,阅读器可能会无限期地保留资源。

      在超类中此方法的默认实现不执行任何操作。子类实现应确保释放所有资源,特别是本机资源。

    • getSourceRegion

      protected static Rectangle getSourceRegion(ImageReadParam param, int srcWidth, int srcHeight)
      读取器可能使用的实用方法,用于计算应该读取的源图像区域,考虑到提供的ImageReadParam中的源区域和子采样偏移设置。实际的子采样因子、目标大小和目标偏移量不被考虑,因此必须进一步进行裁剪。 computeRegions方法执行所有必要的裁剪。
      参数:
      param - 正在使用的ImageReadParam,或null
      srcWidth - 源图像的宽度。
      srcHeight - 源图像的高度。
      返回:
      作为Rectangle的源区域。
    • computeRegions

      protected static void computeRegions(ImageReadParam param, int srcWidth, int srcHeight, BufferedImage image, Rectangle srcRegion, Rectangle destRegion)
      计算感兴趣的源区域和目标区域,考虑源图像的宽度和高度、可选的目标图像以及可选的ImageReadParam。源区域始于整个源图像。然后,如果指定了ImageReadParam中的源区域,则将其裁剪到该源区域。

      如果任一目标偏移为负,则裁剪源区域,使其左上角与目标图像的左上角重合,考虑到子采样。然后,根据需要考虑子采样和目标偏移,将结果裁剪到目标图像的右侧和底部,如果指定了目标图像。

      类似地,目标区域始于源图像,根据ImageReadParam中给定的目标偏移进行平移,最后裁剪到目标图像,如果有的话。

      如果源区域或目标区域最终宽度或高度为0,则抛出IllegalArgumentException

      如果只需要源裁剪,则可以使用getSourceRegion>方法。

      参数:
      param - 一个ImageReadParam,或null
      srcWidth - 源图像的宽度。
      srcHeight - 源图像的高度。
      image - 将成为目标图像的BufferedImage,或null
      srcRegion - 将填充源感兴趣区域的Rectangle
      destRegion - 将填充目标感兴趣区域的Rectangle
      抛出:
      IllegalArgumentException - 如果srcRegionnull
      IllegalArgumentException - 如果dstRegionnull
      IllegalArgumentException - 如果生成的源或目标区域为空。
    • checkReadParamBandSettings

      protected static void checkReadParamBandSettings(ImageReadParam param, int numSrcBands, int numDstBands)
      读取器可能使用的实用方法,用于测试ImageReadParam的源和目标波段设置的有效性。一旦读取器知道源图像在输入流中存在的波段数以及正在写入的目标图像的波段数,就可以调用此方法。

      该方法使用param使用getSourceBandsgetDestinationBands方法从参数中检索源和目标波段设置数组(如果paramnull,则认为它们等于数组{ 0, 1, ..., numSrcBands - 1 })。然后测试两个数组的长度是否相等,以及两个数组中是否都不包含大于最大可用波段索引的值。

      任何失败都会导致抛出IllegalArgumentException;成功则导致方法静默返回。

      参数:
      param - 用于读取图像的ImageReadParam
      numSrcBands - 输入源中图像的波段数。
      numDstBands - 正在写入的目标图像中的波段数。
      抛出:
      IllegalArgumentException - 如果param包含无效的源和/或目标波段子集规范。
    • getDestination

      protected static BufferedImage getDestination(ImageReadParam param, Iterator<ImageTypeSpecifier> imageTypes, int width, int height) throws IIOException
      返回应写入解码像素数据的BufferedImage。如果ImageReadParamnull,则通过检查其提供的ImageReadParam确定图像;如果其getDestination方法返回非null值,则简单地返回该图像。否则,将调用param.getDestinationType方法以确定是否指定了特定图像类型。如果是,则在检查其是否等于imageTypes中包含的图像类型之一后使用返回的ImageTypeSpecifier

      如果paramnull或上述步骤未产生图像或ImageTypeSpecifier,则使用从imageTypes参数获取的第一个值。通常,调用者将imageTypes设置为getImageTypes(imageIndex)的值。

      接下来,通过调用computeRegions确定图像的尺寸。解码图像的实际宽度和高度作为widthheight参数传递。

      参数:
      param - 用于获取目标图像或图像类型的ImageReadParam,或null
      imageTypes - 包含合法图像类型的ImageTypeSpecifierIterator,默认为第一个。
      width - 正在解码的图像或图块的实际宽度。
      height - 正在解码的图像或图块的实际高度。
      返回:
      应写入解码像素数据的BufferedImage
      抛出:
      IIOException - 如果由param指定的ImageTypeSpecifierimageTypes中的任何合法值不匹配。
      IllegalArgumentException - 如果imageTypesnull或为空,或者如果从中检索到不是ImageTypeSpecifier类型的对象。
      IllegalArgumentException - 如果生成的图像的宽度或高度小于1。
      IllegalArgumentException - 如果widthheight的乘积大于Integer.MAX_VALUE