- 直接已知的子类:
-
ImageReadParam
,ImageWriteParam
ImageReadParam
和ImageWriteParam
共享的变量和方法。
此类提供机制来指定源区域和目标区域。在读取时,源是流,内存中的图像是目标。在写入时,这些是相反的。在写入的情况下,只有支持像素替换的写入器才能使用目标区域。
可以为读取器和写入器指定降采样子采样,使用可移动的子采样网格。
可以选择源和目标波段的子集。
-
Field Summary
Modifier and TypeFieldDescriptionprotected IIOParamController
在调用activateController
方法时,将用于为此IIOParam
对象提供设置的IIOParamController
。protected IIOParamController
在调用activateController
方法时,将用于为此IIOParam
对象提供设置的默认IIOParamController
。protected Point
将上左解码像素放置在目标中的偏移量。protected ImageTypeSpecifier
用于在读取时生成目标图像或在写入时设置输出颜色类型的ImageTypeSpecifier
。protected int[]
一个表示将使用哪些源波段的int
数组,或null
。protected Rectangle
源区域,如果未设置则为null
。protected int
应用于水平方向的降采样子采样。protected int
应用于垂直方向的降采样子采样。protected int
在子采样之前应用于子采样网格的水平偏移量。protected int
在子采样之前应用于子采样网格的垂直偏移量。 -
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionboolean
激活安装的IIOParamController
以为此IIOParam
对象提供设置,并返回结果值。返回当前安装的任何IIOParamController
。返回默认的IIOParamController
,如果有的话,而不管当前安装的控制器是什么。返回要放置像素的目标图像中的偏移量。返回读取时要返回的图像类型,如果通过调用setDestination(ImageTypeSpecifier)
设置了一个,则作为ImageTypeSpecifier
。int[]
返回要使用的源波段集。返回要使用的源区域。int
返回每个像素要前进的源列数。int
返回每个像素要前进的行数。int
返回子采样网格的水平偏移量。int
返回子采样网格的垂直偏移量。boolean
如果为此IIOParam
对象安装了控制器,则返回true
。void
setController
(IIOParamController controller) 设置要在调用activateController
方法时为此IIOParam
对象提供设置的IIOParamController
,覆盖任何默认控制器。void
setDestinationOffset
(Point destinationOffset) 指定将来解码像素放置在目标图像中的偏移量,用于读取时,或在写入时将在其中写入区域的位置。void
setDestinationType
(ImageTypeSpecifier destinationType) 使用ImageTypeSpecifier
设置目标图像的所需图像类型。void
setSourceBands
(int[] sourceBands) 设置要使用的源波段的索引。void
setSourceRegion
(Rectangle sourceRegion) 设置感兴趣的源区域。void
setSourceSubsampling
(int sourceXSubsampling, int sourceYSubsampling, int subsamplingXOffset, int subsamplingYOffset) 指定要在I/O上应用的降采样子采样。
-
Field Details
-
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
数组,或null
。如果为null
,则要使用的源波段集如setSourceBands
方法的注释中所述。不应允许任何值为负数。 -
destinationType
用于在读取时生成目标图像或在写入时设置输出颜色类型的ImageTypeSpecifier
。如果未设置任何值,则值将为null
。默认情况下,值为null
。 -
destinationOffset
将上左解码像素放置在目标中的偏移量。默认情况下,值为(0,0)。 -
defaultController
在调用activateController
方法时,将用于为此IIOParam
对象提供设置的默认IIOParamController
。通常,选择提供自己的默认控制器(通常为GUI)的子类应设置此默认值。- 参见:
-
controller
在调用activateController
方法时,将用于为此IIOParam
对象提供设置的IIOParamController
。此值将覆盖任何默认控制器,即使为null。- 参见:
-
-
Constructor Details
-
IIOParam
protected IIOParam()受保护的构造函数只能由子类调用。
-
-
Method Details
-
setSourceRegion
设置感兴趣的源区域。感兴趣区域被描述为一个矩形,源图像的左上角像素为(0,0),向下和向右增加值。实际使用的像素数量将取决于setSourceSubsampling
设置的子采样因子。如果设置了子采样,使得此数量为零,将抛出IllegalStateException
。此方法指定的源感兴趣区域将根据需要裁剪以适应实际I/O时的源边界,以及目标偏移、宽度和高度。
sourceRegion
为null
将删除任何区域规范,导致使用整个图像。- 参数:
-
sourceRegion
- 指定源感兴趣区域的Rectangle
,或null
。 - 抛出:
-
IllegalArgumentException
- 如果sourceRegion
为非null
,并且sourceRegion.x
或sourceRegion.y
为负数。 -
IllegalArgumentException
- 如果sourceRegion
为非null
,并且sourceRegion.width
或sourceRegion.height
为负数或0。 -
IllegalStateException
- 如果子采样使得此区域的子采样宽度或高度为零。 - 参见:
-
getSourceRegion
返回要使用的源区域。返回值是最近一次调用setSourceRegion
设置的值,如果未设置区域,则为null
。- 返回:
-
感兴趣的源区域作为
Rectangle
,或null
。 - 参见:
-
setSourceSubsampling
public void setSourceSubsampling(int sourceXSubsampling, int sourceYSubsampling, int subsamplingXOffset, int subsamplingYOffset) 指定要在I/O上应用的降采样。参数sourceXSubsampling
和sourceYSubsampling
指定了子采样周期(即,每个源像素后要前进的行数和列数)。具体来说,周期为1将使用每一行或每一列;周期为2将使用每隔一行或一列。参数subsamplingXOffset
和subsamplingYOffset
指定了第一个子采样像素相对于区域(或图像)原点的偏移量。调整子采样网格的原点对于避免在将非常大的源图像降采样到将被组装成完整降采样图像的目标区域时出现接缝是有用的。大多数用户希望将这些参数简单地保留为0。要使用的像素数和扫描线数计算如下。
扫描线中的子采样像素数由以下公式给出
truncate[(width - subsamplingXOffset + sourceXSubsampling - 1) / sourceXSubsampling]
。如果区域使得宽度为零,则会抛出
IllegalStateException
。如果区域的宽度和高度不是子采样周期的倍数,将子采样网格设置为从源区域原点以外的某个位置开始是有用的。如果子采样网格在每个瓦片之间不保持一致,将在瓦片边界处出现伪影。通过调整每个瓦片的子采样网格偏移量来补偿,可以避免这些伪影。权衡是为了避免这些伪影,瓦片的大小并不相同。在这种情况下要使用的网格偏移量为:
网格偏移量 = [周期 - (区域偏移模周期)]模周期)如果
sourceXSubsampling
或sourceYSubsampling
为0或负数,则会抛出IllegalArgumentException
。如果
subsamplingXOffset
或subsamplingYOffset
为负数或大于或等于相应的周期,则会抛出IllegalArgumentException
。没有
unsetSourceSubsampling
方法;只需调用setSourceSubsampling(1, 1, 0, 0)
即可恢复默认值。- 参数:
-
sourceXSubsampling
- 像素之间要前进的列数。 -
sourceYSubsampling
- 像素之间要前进的行数。 -
subsamplingXOffset
- 区域内或图像内第一个子采样的水平偏移量。 -
subsamplingYOffset
- 区域内或图像内第一个子采样的垂直偏移量。 - 抛出:
-
IllegalArgumentException
- 如果任一周期为负数或0,或者任一网格偏移为负数或大于相应的周期。 -
IllegalStateException
- 如果源区域使得子采样输出不包含任何像素。
-
getSourceXSubsampling
public int getSourceXSubsampling()返回每个像素要前进的源列数。如果未调用
setSourceSubsampling
,则返回1(这是正确的值)。- 返回:
- 源子采样X周期。
- 参见:
-
getSourceYSubsampling
public int getSourceYSubsampling()返回每个像素要前进的行数。如果未调用
setSourceSubsampling
,则返回1(这是正确的值)。- 返回:
- 源子采样Y周期。
- 参见:
-
getSubsamplingXOffset
public int getSubsamplingXOffset()返回子采样网格的水平偏移量。如果未调用
setSourceSubsampling
,则返回0(这是正确的值)。- 返回:
- 源子采样网格X偏移量。
- 参见:
-
getSubsamplingYOffset
public int getSubsamplingYOffset()返回子采样网格的垂直偏移量。如果未调用
setSourceSubsampling
,则返回0(这是正确的值)。- 返回:
- 源子采样网格Y偏移量。
- 参见:
-
setSourceBands
public void setSourceBands(int[] sourceBands) 设置要使用的源波段的索引。不允许重复索引。null
值表示将使用所有源波段。在读取时,如果指定了大于最大可用源波段索引的值,或者源波段数和要使用的目标波段数不同,读取器或写入器将抛出
IllegalArgumentException
。可以使用ImageReader.checkReadParamBandSettings
方法自动执行此测试。从语义上讲,数组将被复制;在此调用之后对数组内容的更改对此
没有影响。 - 参数:
-
sourceBands
- 要使用的整数波段索引数组。 - 抛出:
-
IllegalArgumentException
- 如果sourceBands
包含负值或重复值。 - 参见:
-
getSourceBands
public int[] getSourceBands()返回要使用的源波段集。返回值是最近一次调用setSourceBands
设置的值,如果没有调用setSourceBands
,则返回null
。从语义上讲,返回的数组是一个副本;在此调用之后对数组内容的更改对此
没有影响。 - 返回:
-
要使用的源波段集,或
null
。 - 参见:
-
setDestinationType
使用ImageTypeSpecifier
设置目标图像的期望图像类型。在读取时,如果使用此方法设置了目标的布局,每次调用
ImageReader
的read
方法都将返回一个新的BufferedImage
,使用所提供的类型规范指定的格式。作为副作用,通过ImageReadParam.setDestination(BufferedImage)
设置的任何目标BufferedImage
将不再设置为目标。换句话说,这个方法可以被视为调用setDestination((BufferedImage)null)
。在写入时,目标类型可能用于确定图像的颜色类型。将忽略
SampleModel
信息,可能为null
。例如,4波段图像可以表示CMYK或RGBA数据。如果设置了目标类型,其ColorModel
将覆盖图像本身的任何ColorModel
。当使用setSourceBands
时,这一点至关重要,因为图像的ColorModel
将引用整个图像而不是正在写入的波段子集。- 参数:
-
destinationType
- 要用于确定目标布局和颜色类型的ImageTypeSpecifier
。 - 参见:
-
getDestinationType
返回通过调用setDestination(ImageTypeSpecifier)
设置的读取时要返回的图像类型,作为ImageTypeSpecifier
。如果没有设置,则返回null
。- 返回:
-
描述目标类型的
ImageTypeSpecifier
,或null
。 - 参见:
-
setDestinationOffset
指定在读取时将来的解码像素放置在目标图像中的偏移量,或在写入时将要写入的区域。在读取时,要写入目标
BufferedImage
中的区域将从此偏移开始,并且其宽度和高度由感兴趣的源区域、子采样参数和目标边界确定。正常写入不受此方法的影响,只有使用
ImageWriter.replacePixels
执行的写入受影响。对于这样的写入,指定的偏移量位于正在修改其像素的输出流图像内。没有
unsetDestinationOffset
方法;只需调用setDestinationOffset(new Point(0, 0))
即可恢复默认值。- 参数:
-
destinationOffset
- 作为Point
的目标中的偏移量。 - 抛出:
-
IllegalArgumentException
- 如果destinationOffset
为null
。 - 参见:
-
getDestinationOffset
返回要放置像素的目标图像中的偏移量。如果尚未调用
setDestinationOffsets
,则返回一个X和Y值均为零的Point
(这是正确的值)。- 返回:
-
作为
Point
的目标偏移量。 - 另请参阅:
-
setController
设置要在调用activateController
方法时为此IIOParam
对象提供设置的IIOParamController
,覆盖任何默认控制器。如果参数为null
,则不会使用任何控制器,包括任何默认控制器。要恢复默认值,请使用setController(getDefaultController())
。- 参数:
-
controller
- 适当的IIOParamController
,或null
。 - 另请参阅:
-
getController
返回当前安装的任何IIOParamController
。如果有默认控制器,则可能是默认控制器,null
,或者最近一次调用setController
的参数。- 返回:
-
当前安装的
IIOParamController
,或null
。 - 另请参阅:
-
getDefaultController
返回默认的IIOParamController
,如果有的话,而不管当前安装的控制器是什么。如果没有默认控制器,则返回null
。- 返回:
-
默认的
IIOParamController
,或null
。 - 另请参阅:
-
hasController
public boolean hasController()如果为此IIOParam
对象安装了控制器,则返回true
。如果getController
不会返回null
,则将返回true
。- 返回:
-
如果安装了控制器,则返回
true
。 - 另请参阅:
-
activateController
public boolean activateController()激活此IIOParam
对象的安装的IIOParamController
,并返回结果值。当此方法返回true
时,此IIOParam
对象的所有值将准备好进行下一次读取或写入操作。如果返回false
,则此对象中的任何设置都不会被更改(即,用户取消了操作)。通常,控制器将是为特定插件的
IIOParam
子类提供用户界面的GUI。但是,控制器不一定是GUI。- 返回:
-
如果控制器正常完成,则返回
true
。 - 抛出:
-
IllegalStateException
- 如果当前没有安装控制器。 - 另请参阅:
-