Module  java.desktop
软件包  javax.imageio

Class IIOParam

  • 已知直接子类:
    ImageReadParamImageWriteParam


    public abstract class IIOParam
    extends Object
    描述流如何解码或编码的所有类的超类。 此类包含ImageReadParamImageWriteParam共享的所有变量和方法。

    该类提供了指定源区域和目标区域的机制。 读取时,源是流,内存中的映像是目标。 写作时,这些都是相反的。 在写入的情况下,目的地区域可以仅与支持像素替换的写入器一起使用。

    可以使用可移动的子采样网格为读者和作者指定抽取次采样。

    可以选择源和目的地频带的子集。

    • 字段详细信息

      • sourceRegion

        protected Rectangle sourceRegion
        源区域,如果没有设置, null
      • sourceXSubsampling

        protected int sourceXSubsampling
        在水平方向应用抽取次采样。 默认值为1 该值不能为负数或0。
      • sourceYSubsampling

        protected int sourceYSubsampling
        在垂直方向应用抽取次采样。 默认值为1 该值不能为负数或0。
      • subsamplingXOffset

        protected int subsamplingXOffset
        在采样之前应用于子采样网格的水平偏移。 要使用的第一个像素将从该区域的原点偏移该量,或者如果未指定区域,则将偏移该图像。
      • subsamplingYOffset

        protected int subsamplingYOffset
        在二次采样之前应用于子采样网格的垂直偏移。 要使用的第一个像素将从该区域的原点偏移该量,或者如果未指定区域,则将偏移该图像。
      • sourceBands

        protected int[] sourceBands
        int s的阵列指示将使用哪些源频段,或null 如果是nullnull使用的源频带集合如setSourceBands方法的注释所述。 不应该允许任何价值为负数。
      • destinationType

        protected ImageTypeSpecifier destinationType
        一个ImageTypeSpecifier用于在读取时生成目标图像,或者在写入时设置输出颜色类型。 如果未设置,则值为null 默认值为null
      • destinationOffset

        protected Point destinationOffset
        应放置左上角解码像素的目的地偏移量。 默认值为(0,0)。
    • 构造方法详细信息

      • IIOParam

        protected IIOParam​()
        受保护的构造函数只能由子类调用。
    • 方法详细信息

      • setSourceRegion

        public void setSourceRegion​(Rectangle sourceRegion)
        设置感兴趣的源区域。 感兴趣的区域被描述为一个矩形,源图像的左上角是像素(0,0),并且向下和向右增加值。 实际使用的像素数将取决于setSourceSubsampling设置的子采样因子。 如果子采样被设置为使得该数字为零,则将抛出IllegalStateException

        由该方法指定的感兴趣的源区域将根据需要进行修剪以适应源边界以及实际I / O时的目标偏移量,宽度和高度。

        nullsourceRegion将删除任何区域规范,导致使用整个图像。

        参数
        sourceRegion - a Rectangle指定感兴趣的源区域,或 null
        异常
        IllegalArgumentException - 如果 sourceRegion为非 nullsourceRegion.xsourceRegion.y为负。
        IllegalArgumentException - 如果 sourceRegion为非 nullsourceRegion.widthsourceRegion.height为负或为0。
        IllegalStateException - 如果子采样使得该区域将具有二次采样宽度或零度的高度。
        另请参见:
        getSourceRegion()setSourceSubsampling(int, int, int, int)setDestinationOffset(java.awt.Point)getDestinationOffset()
      • getSourceRegion

        public Rectangle getSourceRegion​()
        返回要使用的源区域。 返回的值是由最近调用的setSourceRegion ,如果没有区域设置, null
        结果
        源区域为 Rectangle ,或 null
        另请参见:
        setSourceRegion(java.awt.Rectangle)
      • setSourceSubsampling

        public void setSourceSubsampling​(int sourceXSubsampling,
                                         int sourceYSubsampling,
                                         int subsamplingXOffset,
                                         int subsamplingYOffset)
        指定抽取次采样以应用于I / O。 sourceXSubsamplingsourceYSubsampling参数指定子采样周期( ,每个源像素之后要提前的行数和列数)。 具体来说,1的周期将使用每行或列; 一个2的周期将使用每隔一行或一列。 subsamplingXOffsetsubsamplingYOffset参数指定了第一subsamplingXOffset采样像素的区域(或图像)原点的偏移量。 调整子样本网格的原点对于在将非常大的源图像进行子采样到将被组装成完整的子采样图像的目的地区域时避免接缝是有用的。 大多数用户都希望将这些参数保留在0。

        要使用的像素数和扫描线的数量如下计算。

        扫描线中子采样像素的数量由下式给出

        truncate[(width - subsamplingXOffset + sourceXSubsampling - 1) / sourceXSubsampling]

        如果区域是这样的宽度为零,则抛出一个IllegalStateException

        可以类似地计算要使用的扫描线的数量。

        如果该区域用于创建大图像的子采样图块,其中图块宽度和高度不是子采样周期的倍数,则将二次采样网格设置为开始于源区域原点以外的位置的功能非常有用。 如果子采样网格从块到块不保持一致,则在块边界处将存在伪像。 通过调整每个瓦片的子采样网格偏移量进行补偿,可以避免这些伪像。 折衷的是,为了避免这些工件,瓷砖的尺寸不一样。 在这种情况下使用的网格偏移量由下式给出:
        网格偏移= [周期 - (区域偏移模周期)]模周期)

        如果sourceXSubsamplingsourceYSubsampling为0或IllegalArgumentException将抛出IllegalArgumentException

        如果subsamplingXOffsetsubsamplingYOffset为负数或大于或等于相应期间,将抛出IllegalArgumentException

        没有unsetSourceSubsampling方法; 只需调用setSourceSubsampling(1, 1, 0, 0)即可恢复默认值。

        参数
        sourceXSubsampling - 要在像素之间前进的列数。
        sourceYSubsampling - 要在像素之间推进的行数。
        subsamplingXOffset - 区域内的第一 subsamplingXOffset的水平偏移,或者如果没有设置区域,则在图像内。
        subsamplingYOffset - 区域内的第一 subsamplingYOffset的水平偏移,或者如果没有设置区域,则在图像内。
        异常
        IllegalArgumentException - 如果任一周期为负或0,或者任一电网偏移为负或大于相应周期。
        IllegalStateException - 如果源区域使得子采样输出将不包含像素。
      • setSourceBands

        public void setSourceBands​(int[] sourceBands)
        设置要使用的源频带的索引。 不允许重复索引。

        A null值表示将使用所有源频段。

        在读取时,如果已经指定了大于最大可用源频带索引的值,或者要使用的源频带和目标频带数量不同,读写器将抛出IllegalArgumentException 可以使用ImageReader.checkReadParamBandSettings方法自动执行此测试。

        语义上,一个副本是由阵列组成的; 对此调用之后的数组内容的更改对此IIOParam没有任何影响。

        参数
        sourceBands - 要使用的整数带索引数组。
        异常
        IllegalArgumentException - 如果 sourceBands包含负值或重复值。
        另请参见:
        getSourceBands()ImageReadParam.setDestinationBands(int[])ImageReader.checkReadParamBandSettings(javax.imageio.ImageReadParam, int, int)
      • getSourceBands

        public int[] getSourceBands​()
        返回要使用的源频带集。 返回的值是通过最近一次调用设置为setSourceBands ,或null如果已经有过任何呼叫setSourceBands

        语义上,返回的数组是一个副本; 此调用之后对数组内容的更改对此IIOParam

        结果
        要使用的一组源频段,或 null
        另请参见:
        setSourceBands(int[])
      • setDestinationType

        public void setDestinationType​(ImageTypeSpecifier destinationType)
        使用ImageTypeSpecifier设置目标图像的所需图像类型。

        当读取时,如果使用此方法设置了目的地的布局,则每次调用ImageReader read方法将使用提供的类型说明符指定的格式返回新的BufferedImage 作为副作用,任何目的地BufferedImage组由ImageReadParam.setDestination(BufferedImage)将不再被设定为目的地。 换句话说,这种方法可能被认为是调用setDestination((BufferedImage)null)

        当写入时,目的地类型可能用于确定图像的颜色类型。 SampleModel信息将被忽略,可能是null 例如,4带图像可以表示CMYK或RGBA数据。 如果设置了目的地类型,其ColorModel将覆盖图像本身上的任何ColorModel 当使用setSourceBands时,这是至关重要的,因为图像的ColorModel将引用整个图像,而不是要写入的频带子集。

        参数
        destinationType - 用于确定目的地布局和颜色类型的 ImageTypeSpecifier
        另请参见:
        getDestinationType()
      • getDestinationType

        public ImageTypeSpecifier getDestinationType​()
        如果通过调用setDestination(ImageTypeSpecifier)设置了读取,则返回要返回的图像的类型,如ImageTypeSpecifier 如果没有设置,则返回null
        结果
        描述目的地类型的 ImageTypeSpecifier ,或 null
        另请参见:
        setDestinationType(javax.imageio.ImageTypeSpecifier)
      • setDestinationOffset

        public void setDestinationOffset​(Point destinationOffset)
        指定目标图像中的未来解码像素的偏移量,读取时或写入区域的位置。

        当读取时,要在目的地BufferedImage写入的区域将从该偏移开始,并且具有由感兴趣的源区域,子采样参数和目的地边界确定的宽度和高度。

        正常写入不受此方法的影响,只能使用ImageWriter.replacePixels执行写操作。 对于这样的写入,指定的偏移量在其像素被修改的输出流图像内。

        没有unsetDestinationOffset方法; 只需拨打setDestinationOffset(new Point(0, 0))即可恢复默认值。

        参数
        destinationOffset - 目的地的偏移量,为 Point
        异常
        IllegalArgumentException - 如果 destinationOffsetnull
        另请参见:
        getDestinationOffset()ImageWriter.replacePixels(java.awt.image.RenderedImage, javax.imageio.ImageWriteParam)
      • getDestinationOffset

        public Point getDestinationOffset​()
        返回目标图像中要放置像素的偏移量。

        如果setDestinationOffsets尚未被调用,则返回一个具有零X和Y值的Point (这是正确的值)。

        结果
        目的地偏移量为 Point
        另请参见:
        setDestinationOffset(java.awt.Point)
      • setController

        public void setController​(IIOParamController controller)
        设置IIOParamController被用来提供用于此设置IIOParam对象时activateController方法被调用时,重写所有默认控制器。 如果参数为null ,则不会使用任何控制器,包括任何默认值。 要恢复默认值,请使用setController(getDefaultController())
        参数
        controller - 适当的 IIOParamControllernull
        另请参见:
        IIOParamControllergetController()getDefaultController()hasController()activateController()
      • activateController

        public boolean activateController​()
        激活已安装的IIOParamController对于此IIOParam对象并返回结果值。 当此方法返回true ,此IIOParam对象的所有值将准备好进行下一次读取或写入操作。 如果返回false则此对象中的设置不会受到干扰( 用户取消了该操作)。

        通常,控制器将是为特定插件提供IIOParam子类的用户界面的GUI。 控制器不需要GUI。

        结果
        true如果控制器正常完成。
        异常
        IllegalStateException - 如果当前没有安装控制器。
        另请参见:
        IIOParamControllersetController(IIOParamController)getController()getDefaultController()hasController()