java.lang.Object
java.awt.image.SampleModel
java.awt.image.ComponentSampleModel
- 直接已知的子类:
-
BandedSampleModel
,PixelInterleavedSampleModel
该类表示存储图像数据的方式,使得每个像素的每个样本占据DataBuffer的一个数据元素。它将构成像素的N个样本存储在N个单独的数据数组元素中。不同波段可以位于DataBuffer的不同bank中。提供了访问器方法,以便直接操作图像数据。该类可以支持不同类型的交错,例如波段交错、扫描线交错和像素交错。像素步幅是同一波段同一扫描线上两个样本之间的数据数组元素数量。扫描线步幅是给定样本与下一个扫描线同一列中相应样本之间的数据数组元素数量。波段偏移表示从DataBuffer的每个波段的第一个数据数组元素到波段的第一个样本的数据数组元素数量。波段从0到N-1编号。该类可以表示每个样本为无符号整数,可以存储在8、16或32位中(分别使用DataBuffer.TYPE_BYTE、DataBuffer.TYPE_USHORT或DataBuffer.TYPE_INT),每个样本为有符号整数,可以存储在16位中(使用DataBuffer.TYPE_SHORT),或每个样本为有符号浮点数或双精度量(分别使用DataBuffer.TYPE_FLOAT或DataBuffer.TYPE_DOUBLE)。给定ComponentSampleModel的所有样本都以相同的精度存储。所有步幅和偏移必须是非负的。该类支持TYPE_BYTE、TYPE_USHORT、TYPE_SHORT、TYPE_INT、TYPE_FLOAT、TYPE_DOUBLE。
- 参见:
-
Field Summary
Modifier and TypeFieldDescriptionprotected int[]
所有波段的数据数组元素偏移量。protected int[]
存储图像数据波段的每个bank的索引。protected int
这个ComponentSampleModel中的波段数。protected int
这个ComponentSampleModel中的bank数。protected int
由该ComponentSampleModel描述的图像数据区域的像素步幅(数据数组元素)。protected int
由该ComponentSampleModel描述的图像数据区域的行步幅(数据数组元素)。Fields declared in class java.awt.image.SampleModel
dataType, height, width
-
Constructor Summary
ConstructorDescriptionComponentSampleModel
(int dataType, int w, int h, int pixelStride, int scanlineStride, int[] bandOffsets) 使用指定的参数构造ComponentSampleModel。ComponentSampleModel
(int dataType, int w, int h, int pixelStride, int scanlineStride, int[] bankIndices, int[] bandOffsets) 使用指定的参数构造ComponentSampleModel。 -
Method Summary
Modifier and TypeMethodDescriptioncreateCompatibleSampleModel
(int w, int h) 创建一个具有指定宽度和高度的新ComponentSampleModel。创建与此ComponentSampleModel对应的DataBuffer。createSubsetSampleModel
(int[] bands) 使用此ComponentSampleModel的部分波段创建一个新的ComponentSampleModel。final int[]
返回所有波段的波段偏移量。final int[]
返回所有波段的bank索引。getDataElements
(int x, int y, Object obj, DataBuffer data) 返回类型为TransferType的原始数组中单个像素的数据。final int
返回使用getDataElements(int, int, Object, DataBuffer)和setDataElements(int, int, Object, DataBuffer)方法传输像素所需的数据元素数量。int
getOffset
(int x, int y) 获取像素(x,y)的第一个波段的偏移量。int
getOffset
(int x, int y, int b) 获取像素(x,y)的第b个波段的偏移量。int[]
getPixel
(int x, int y, int[] iArray, DataBuffer data) 返回int数组中指定像素的所有样本,每个数组元素一个样本。int[]
getPixels
(int x, int y, int w, int h, int[] iArray, DataBuffer data) 返回int数组中指定像素矩形的所有样本,每个数组元素一个样本。final int
返回此ComponentSampleModel的像素步幅。int
getSample
(int x, int y, int b, DataBuffer data) 返回位于(x,y)处像素的指定波段的样本作为int。double
getSampleDouble
(int x, int y, int b, DataBuffer data) 返回位于(x,y)处像素的指定波段的样本作为double。float
getSampleFloat
(int x, int y, int b, DataBuffer data) 返回位于(x,y)处像素的指定波段的样本作为float。int[]
getSamples
(int x, int y, int w, int h, int b, int[] iArray, DataBuffer data) 返回int数组中指定像素矩形的指定波段的所有样本,每个数据数组元素一个样本。final int[]
返回所有波段的每个样本的位数。final int
getSampleSize
(int band) 返回指定波段的每个样本的位数。final int
返回此ComponentSampleModel的扫描线步幅。void
setDataElements
(int x, int y, Object obj, DataBuffer data) 从TransferType类型的原始数组中设置指定DataBuffer中的单个像素的数据。void
setPixel
(int x, int y, int[] iArray, DataBuffer data) 使用输入的int数组设置DataBuffer中的像素。void
setPixels
(int x, int y, int w, int h, int[] iArray, DataBuffer data) 从包含每个数组元素一个样本的int数组设置像素矩形的所有样本。void
setSample
(int x, int y, int b, double s, DataBuffer data) 使用double设置DataBuffer中(x,y)处指定波段的像素的样本。void
setSample
(int x, int y, int b, float s, DataBuffer data) 使用float设置DataBuffer中(x,y)处指定波段的像素的样本。void
setSample
(int x, int y, int b, int s, DataBuffer data) 使用int设置DataBuffer中(x,y)处指定波段的像素的样本。void
setSamples
(int x, int y, int w, int h, int b, int[] iArray, DataBuffer data) 从包含每个数据数组元素一个样本的int数组设置指定像素矩形的指定波段的所有样本。Methods declared in class java.awt.image.SampleModel
getDataElements, getDataType, getHeight, getNumBands, getPixel, getPixel, getPixels, getPixels, getSamples, getSamples, getTransferType, getWidth, setDataElements, setPixel, setPixel, setPixels, setPixels, setSamples, setSamples
-
Field Details
-
bandOffsets
protected int[] bandOffsets所有波段的数据数组元素偏移量。 -
bankIndices
protected int[] bankIndices存储图像数据波段的每个bank的索引。 -
numBands
protected int numBands这个ComponentSampleModel中的波段数。 -
numBanks
protected int numBanks这个ComponentSampleModel中的bank数。 -
scanlineStride
protected int scanlineStride由该ComponentSampleModel描述的图像数据区域的行步幅(数据数组元素)。 -
pixelStride
protected int pixelStride由该ComponentSampleModel描述的图像数据区域的像素步幅(数据数组元素)。
-
-
Constructor Details
-
ComponentSampleModel
public ComponentSampleModel(int dataType, int w, int h, int pixelStride, int scanlineStride, int[] bandOffsets) 使用指定的参数构造ComponentSampleModel。波段数将由bandOffsets数组的长度给出。所有波段将存储在DataBuffer的第一个bank中。- 参数:
-
dataType
- 存储样本的数据类型 -
w
- 描述图像数据区域的宽度(以像素为单位) -
h
- 描述图像数据区域的高度(以像素为单位) -
pixelStride
- 描述图像数据区域的像素步幅 -
scanlineStride
- 描述图像数据区域的行步幅 -
bandOffsets
- 所有波段的偏移量 - 抛出:
-
IllegalArgumentException
- 如果w
和h
都不大于0 -
IllegalArgumentException
- 如果w
和h
的乘积大于Integer.MAX_VALUE
-
IllegalArgumentException
- 如果pixelStride
小于0 -
IllegalArgumentException
- 如果scanlineStride
小于0 -
NullPointerException
- 如果bandOffsets
为null
-
IllegalArgumentException
- 如果bandOffsets.length
为0 -
IllegalArgumentException
- 如果dataType
不是此样本模型支持的数据类型之一。
-
ComponentSampleModel
public ComponentSampleModel(int dataType, int w, int h, int pixelStride, int scanlineStride, int[] bankIndices, int[] bandOffsets) 使用指定的参数构造ComponentSampleModel。波段数将由bandOffsets数组的长度给出。不同波段可以存储在DataBuffer的不同bank中。- 参数:
-
dataType
- 用于存储样本的数据类型 -
w
- 描述图像数据区域的宽度(以像素为单位) -
h
- 描述图像数据区域的高度(以像素为单位) -
pixelStride
- 描述图像数据区域的像素跨距 -
scanlineStride
- 描述图像数据区域的扫描线跨距 -
bankIndices
- 所有波段的银行索引 -
bandOffsets
- 所有波段的波段偏移 - 抛出:
-
IllegalArgumentException
- 如果w
和h
都不大于0 -
IllegalArgumentException
- 如果w
和h
的乘积大于Integer.MAX_VALUE
-
IllegalArgumentException
- 如果pixelStride
小于0 -
IllegalArgumentException
- 如果scanlineStride
小于0 -
NullPointerException
- 如果bankIndices
为null
-
NullPointerException
- 如果bandOffsets
为null
-
IllegalArgumentException
- 如果bandOffsets.length
为0 -
IllegalArgumentException
- 如果bankIndices
的长度与bandOffsets
的长度不相等 -
IllegalArgumentException
- 如果dataType
不是此样本模型支持的数据类型之一
-
-
Method Details
-
createCompatibleSampleModel
创建一个具有指定宽度和高度的新ComponentSampleModel
。新的SampleModel
将具有与此SampleModel
相同的波段数、存储数据类型、交错方案和像素跨距。- 指定者:
-
createCompatibleSampleModel
在类SampleModel
中 - 参数:
-
w
- 结果SampleModel
的宽度 -
h
- 结果SampleModel
的高度 - 返回:
-
一个具有指定大小的新
ComponentSampleModel
- 抛出:
-
IllegalArgumentException
- 如果w
或h
不大于0
-
createSubsetSampleModel
使用此ComponentSampleModel的一部分创建一个新的ComponentSampleModel。新的ComponentSampleModel可以与现有的ComponentSampleModel可用的任何DataBuffer一起使用。新的ComponentSampleModel/DataBuffer组合将表示具有原始ComponentSampleModel/DataBuffer组合的波段子集的图像。- 指定者:
-
createSubsetSampleModel
在类SampleModel
中 - 参数:
-
bands
- 来自此ComponentSampleModel
的波段子集 - 返回:
-
使用此
ComponentSampleModel
的波段子集创建的ComponentSampleModel
。
-
createDataBuffer
创建与此ComponentSampleModel
对应的DataBuffer
。DataBuffer对象的数据类型、银行数和大小与此ComponentSampleModel
一致。- 指定者:
-
createDataBuffer
在类SampleModel
中 - 返回:
-
一个
DataBuffer
,其数据类型、银行数和大小与此ComponentSampleModel
一致。
-
getOffset
public int getOffset(int x, int y) 获取像素(x,y)的第一个波段的偏移量。可以使用DataBuffer
data
和ComponentSampleModel
csm
从中检索第一个波段的样本data.getElem(csm.getOffset(x, y));
- 参数:
-
x
- 像素的X位置 -
y
- 像素的Y位置 - 返回:
- 指定像素的第一个波段的偏移量。
-
getOffset
public int getOffset(int x, int y, int b) 获取像素(x,y)的第b个波段的偏移量。可以使用DataBuffer data
和ComponentSampleModel csm
从中检索波段b
的样本data.getElem(csm.getOffset(x, y, b));
- 参数:
-
x
- 指定像素的X位置 -
y
- 指定像素的Y位置 -
b
- 指定的波段 - 返回:
- 指定像素的指定波段的偏移量。
-
getSampleSize
public final int[] getSampleSize()返回所有波段的每个样本的位数。- 指定者:
-
getSampleSize
在类SampleModel
中 - 返回:
- 包含所有波段每个样本的位数的数组,数组中的每个元素表示一个波段。
-
getSampleSize
public final int getSampleSize(int band) 返回指定波段的每个样本的位数。- 指定者:
-
getSampleSize
在类SampleModel
中 - 参数:
-
band
- 指定的波段 - 返回:
- 指定波段的每个样本的位数。
-
getBankIndices
public final int[] getBankIndices()返回所有波段的银行索引。- 返回:
- 所有波段的银行索引。
-
getBandOffsets
public final int[] getBandOffsets()返回所有波段的波段偏移。- 返回:
- 所有波段的波段偏移。
-
getScanlineStride
public final int getScanlineStride()返回此ComponentSampleModel的扫描线跨距。- 返回:
-
此
ComponentSampleModel
的扫描线跨距。
-
getPixelStride
public final int getPixelStride()返回此ComponentSampleModel的像素跨距。- 返回:
-
此
ComponentSampleModel
的像素跨距。
-
getNumDataElements
public final int getNumDataElements()返回使用getDataElements(int, int, Object, DataBuffer)
和setDataElements(int, int, Object, DataBuffer)
方法传输像素所需的数据元素数。对于ComponentSampleModel
,这与波段数相同。- 指定者:
-
getNumDataElements
在类SampleModel
中 - 返回:
-
使用
getDataElements
和setDataElements
方法传输像素所需的数据元素数。 - 参见:
-
getDataElements
返回TransferType
类型的原始数组中单个像素的数据。对于ComponentSampleModel
,这与数据类型相同,并且每个数组元素返回一个样本。通常,应将obj
传递为null
,以便自动创建Object
并且是正确的原始数据类型。以下代码示例说明了从由
ComponentSampleModel csm1
描述的存储布局的DataBuffer db1
向由ComponentSampleModel csm2
描述的存储布局的DataBuffer db2
传输一个像素的数据。传输通常比使用getPixel
和setPixel
更有效。ComponentSampleModel csm1, csm2; DataBufferInt db1, db2; csm2.setDataElements(x, y, csm1.getDataElements(x, y, null, db1), db2);
如果obj
不为null
,则它应为TransferType
类型的原始数组。否则,将抛出ClassCastException
。如果坐标不在范围内,或者obj
不为null
且不足以容纳像素数据,则可能会抛出ArrayIndexOutOfBoundsException
。- 指定者:
-
getDataElements
在类SampleModel
中 - 参数:
-
x
- 像素位置的X坐标 -
y
- 像素位置的Y坐标 -
obj
- 如果非null
,则返回像素数据的原始数组 -
data
- 包含图像数据的DataBuffer
- 返回值:
- 指定像素的数据
- 抛出:
-
NullPointerException
- 如果数据为null。 -
ArrayIndexOutOfBoundsException
- 如果坐标超出范围,或者obj太小无法容纳输出。 - 参见:
-
getPixel
返回一个int数组中指定像素的所有样本,每个数组元素一个样本。如果坐标超出范围,可能会抛出ArrayIndexOutOfBoundsException
。- 覆盖:
-
getPixel
在类SampleModel
中 - 参数:
-
x
- 像素位置的X坐标 -
y
- 像素位置的Y坐标 -
iArray
- 如果非null,则将样本返回到此数组中 -
data
- 包含图像数据的DataBuffer - 返回值:
- 指定像素的样本
- 抛出:
-
NullPointerException
- 如果数据为null。 -
ArrayIndexOutOfBoundsException
- 如果坐标超出范围,或者iArray太小无法容纳输出。 - 参见:
-
getPixels
返回一个int数组中指定像素矩形的所有样本,每个数组元素一个样本。如果坐标超出范围,可能会抛出ArrayIndexOutOfBoundsException
。- 覆盖:
-
getPixels
在类SampleModel
中 - 参数:
-
x
- 左上角像素位置的X坐标 -
y
- 左上角像素位置的Y坐标 -
w
- 像素矩形的宽度 -
h
- 像素矩形的高度 -
iArray
- 如果非null,则将样本返回到此数组中 -
data
- 包含图像数据的DataBuffer - 返回值:
- 指定区域内像素的样本
- 参见:
-
getSample
返回位于(x,y)处像素的指定波段中的样本作为int。如果坐标超出范围,可能会抛出ArrayIndexOutOfBoundsException
。- 指定者:
-
getSample
在类SampleModel
中 - 参数:
-
x
- 像素位置的X坐标 -
y
- 像素位置的Y坐标 -
b
- 要返回的波段 -
data
- 包含图像数据的DataBuffer
- 返回值:
- 指定像素的指定波段中的样本
- 参见:
-
getSampleFloat
返回位于(x,y)处像素的指定波段中的样本作为float。如果坐标超出范围,可能会抛出ArrayIndexOutOfBoundsException
。- 覆盖:
-
getSampleFloat
在类SampleModel
中 - 参数:
-
x
- 像素位置的X坐标 -
y
- 像素位置的Y坐标 -
b
- 要返回的波段 -
data
- 包含图像数据的DataBuffer - 返回值:
- 代表指定像素的指定波段中的样本的float值
-
getSampleDouble
返回位于(x,y)处像素的指定波段中的样本作为double。如果坐标超出范围,可能会抛出ArrayIndexOutOfBoundsException
。- 覆盖:
-
getSampleDouble
在类SampleModel
中 - 参数:
-
x
- 像素位置的X坐标 -
y
- 像素位置的Y坐标 -
b
- 要返回的波段 -
data
- 包含图像数据的DataBuffer - 返回值:
- 代表指定像素的指定波段中的样本的double值
-
getSamples
返回一个int数组中指定像素矩形的指定波段中的所有样本,每个数据数组元素一个样本。如果坐标超出范围,可能会抛出ArrayIndexOutOfBoundsException
。- 覆盖:
-
getSamples
在类SampleModel
中 - 参数:
-
x
- 左上角像素位置的X坐标 -
y
- 左上角像素位置的Y坐标 -
w
- 像素矩形的宽度 -
h
- 像素矩形的高度 -
b
- 要返回的波段 -
iArray
- 如果非null
,则将样本返回到此数组中 -
data
- 包含图像数据的DataBuffer
- 返回值:
- 指定像素的指定波段中的样本
- 参见:
-
setDataElements
从类型为TransferType
的原始数组中设置指定DataBuffer
中单个像素的数据。对于ComponentSampleModel
,这与数据类型相同,每个数组元素传输一个样本。以下代码示例说明了从
DataBuffer db1
传输一个像素的数据,其存储布局由ComponentSampleModel csm1
描述,到DataBuffer db2
,其存储布局由ComponentSampleModel csm2
描述。与使用getPixel
和setPixel
相比,传输通常更有效。ComponentSampleModel csm1, csm2; DataBufferInt db1, db2; csm2.setDataElements(x, y, csm1.getDataElements(x, y, null, db1), db2);
如果obj
不是类型为TransferType
的原始数组,则会抛出ClassCastException
。如果坐标超出范围,或者obj
不足以容纳像素数据,则可能会抛出ArrayIndexOutOfBoundsException
。- 指定者:
-
setDataElements
在类SampleModel
中 - 参数:
-
x
- 像素位置的X坐标 -
y
- 像素位置的Y坐标 -
obj
- 包含像素数据的原始数组 -
data
- 包含图像数据的DataBuffer - 参见:
-
setPixel
使用样本数组设置DataBuffer
中的像素。如果坐标超出范围,可能会抛出ArrayIndexOutOfBoundsException
。- 覆盖:
-
setPixel
在类SampleModel
- 参数:
-
x
- 像素位置的X坐标 -
y
- 像素位置的Y坐标 -
iArray
- 一个int数组中的输入样本 -
data
- 包含图像数据的DataBuffer - 参见:
-
setPixels
从包含每个数组元素一个样本的int数组中设置矩形像素的所有样本。如果坐标超出范围,可能会抛出ArrayIndexOutOfBoundsException异常。- 覆盖:
-
setPixels
在类SampleModel
- 参数:
-
x
- 左上角像素位置的X坐标 -
y
- 左上角像素位置的Y坐标 -
w
- 像素矩形的宽度 -
h
- 像素矩形的高度 -
iArray
- 一个int数组中的输入样本 -
data
- 包含图像数据的DataBuffer - 参见:
-
setSample
使用int类型的输入,在DataBuffer中指定带的像素(x,y)设置样本。如果坐标超出范围,可能会抛出ArrayIndexOutOfBoundsException异常。- 指定者:
-
setSample
在类SampleModel
- 参数:
-
x
- 像素位置的X坐标 -
y
- 像素位置的Y坐标 -
b
- 要设置的带 -
s
- 作为int的输入样本 -
data
- 包含图像数据的DataBuffer - 参见:
-
setSample
使用float类型的输入,在DataBuffer中指定带的像素(x,y)设置样本。如果坐标超出范围,可能会抛出ArrayIndexOutOfBoundsException异常。- 覆盖:
-
setSample
在类SampleModel
- 参数:
-
x
- 像素位置的X坐标 -
y
- 像素位置的Y坐标 -
b
- 要设置的带 -
s
- 作为float的输入样本 -
data
- 包含图像数据的DataBuffer - 参见:
-
setSample
使用double类型的输入,在DataBuffer中指定带的像素(x,y)设置样本。如果坐标超出范围,可能会抛出ArrayIndexOutOfBoundsException异常。- 覆盖:
-
setSample
在类SampleModel
- 参数:
-
x
- 像素位置的X坐标 -
y
- 像素位置的Y坐标 -
b
- 要设置的带 -
s
- 作为double的输入样本 -
data
- 包含图像数据的DataBuffer - 参见:
-
setSamples
从包含每个数据数组元素一个样本的int数组中设置指定矩形像素的指定带的样本。如果坐标超出范围,可能会抛出ArrayIndexOutOfBoundsException异常。- 覆盖:
-
setSamples
在类SampleModel
- 参数:
-
x
- 左上角像素位置的X坐标 -
y
- 左上角像素位置的Y坐标 -
w
- 像素矩形的宽度 -
h
- 像素矩形的高度 -
b
- 要设置的带 -
iArray
- 一个int数组中的输入样本 -
data
- 包含图像数据的DataBuffer - 参见:
-