java.lang.Object
java.awt.image.SampleModel
java.awt.image.ComponentSampleModel
java.awt.image.BandedSampleModel
这个类表示以带交错方式存储的图像数据,每个像素的每个样本占据DataBuffer的一个数据元素。它是ComponentSampleModel的子类,但提供了一个更有效的实现来访问带交错图像数据,而不是ComponentSampleModel提供的。在处理将每个波段的样本数据存储在DataBuffer的不同bank中的图像时,通常应使用此类。提供了访问器方法,以便直接操作图像数据。像素步幅是同一扫描线上同一波段的两个样本之间的数据数组元素数量。BandedSampleModel的像素步幅为1。扫描线步幅是给定样本与下一个扫描线同一列中相应样本之间的数据数组元素数量。波段偏移量表示从DataBuffer的每个波段的第一个数据数组元素到波段的第一个样本的数据数组元素数量。波段从0到N-1编号。银行索引表示数据缓冲区的一个银行与图像数据的一个波段之间的对应关系。此类支持
TYPE_BYTE
、TYPE_USHORT
、TYPE_SHORT
、TYPE_INT
、TYPE_FLOAT
和TYPE_DOUBLE
数据类型
-
Field Summary
Fields declared in class java.awt.image.ComponentSampleModel
bandOffsets, bankIndices, numBands, numBanks, pixelStride, scanlineStride
Fields declared in class java.awt.image.SampleModel
dataType, height, width
-
Constructor Summary
ConstructorDescriptionBandedSampleModel
(int dataType, int w, int h, int numBands) 使用指定的参数构造一个BandedSampleModel。BandedSampleModel
(int dataType, int w, int h, int scanlineStride, int[] bankIndices, int[] bandOffsets) 使用指定的参数构造一个BandedSampleModel。 -
Method Summary
Modifier and TypeMethodDescriptioncreateCompatibleSampleModel
(int w, int h) 创建一个具有指定宽度和高度的新BandedSampleModel。创建一个与此BandedSampleModel对应的DataBuffer,DataBuffer的数据类型、银行数量和大小将与此BandedSampleModel保持一致。createSubsetSampleModel
(int[] bands) 使用此BandedSampleModel的一部分波段创建一个新的BandedSampleModel。getDataElements
(int x, int y, Object obj, DataBuffer data) 返回以TransferType类型的原始数组中的单个像素的数据。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数组中指定像素矩形的所有样本,每个数据数组元素一个样本。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数组中指定像素矩形的指定波段的所有样本,每个数据数组元素一个样本。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.ComponentSampleModel
getBandOffsets, getBankIndices, getNumDataElements, getOffset, getOffset, getPixelStride, getSampleSize, getSampleSize, getScanlineStride
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
-
Constructor Details
-
BandedSampleModel
public BandedSampleModel(int dataType, int w, int h, int numBands) 使用指定的参数构造一个BandedSampleModel。像素步幅将是一个数据元素。扫描线步幅将与宽度相同。每个波段将存储在单独的银行中,所有波段偏移量将为零。- 参数:
-
dataType
- 用于存储样本的数据类型。 -
w
- 描述图像数据区域的宽度(以像素为单位)。 -
h
- 描述图像数据区域的高度(以像素为单位)。 -
numBands
- 图像数据的波段数。 - 抛出:
-
IllegalArgumentException
- 如果w
和h
都不大于0 -
IllegalArgumentException
- 如果w
和h
的乘积大于Integer.MAX_VALUE
-
IllegalArgumentException
- 如果numBands
不大于0 -
IllegalArgumentException
- 如果dataType
不是此样本模型支持的数据类型之一。
-
BandedSampleModel
public BandedSampleModel(int dataType, int w, int h, int scanlineStride, int[] bankIndices, int[] bandOffsets) 使用指定的参数构造一个BandedSampleModel。波段数将根据bandOffsets bankIndices数组的长度推断,它们必须相等。像素步幅将是一个数据元素。- 参数:
-
dataType
- 用于存储样本的数据类型。 -
w
- 描述图像数据区域的宽度(以像素为单位)。 -
h
- 描述图像数据区域的高度(以像素为单位)。 -
scanlineStride
- 图像数据的行跨度。 -
bankIndices
- 每个波段的银行索引。 -
bandOffsets
- 每个波段的波段偏移量。 - 抛出:
-
IllegalArgumentException
- 如果w
和h
都不大于0 -
IllegalArgumentException
- 如果w
和h
的乘积大于Integer.MAX_VALUE
-
IllegalArgumentException
- 如果scanlineStride
小于0 -
NullPointerException
- 如果bankIndices
为null
-
NullPointerException
- 如果bandOffsets
为null
-
IllegalArgumentException
- 如果bandOffsets.length
为0 -
IllegalArgumentException
- 如果bankIndices
的长度与bandOffsets
的长度不相等 -
IllegalArgumentException
- 如果bandIndices
的任何银行索引小于0 -
IllegalArgumentException
- 如果dataType
不是此样本模型支持的数据类型之一
-
-
Method Details
-
createCompatibleSampleModel
创建一个具有指定宽度和高度的新BandedSampleModel。新的BandedSampleModel将具有与此BandedSampleModel相同的波段数、存储数据类型和银行索引。波段偏移将被压缩,使得波段之间的偏移量为w*pixelStride,并且所有波段偏移的最小值为零。- 覆盖:
-
createCompatibleSampleModel
在类ComponentSampleModel
- 参数:
-
w
- 结果BandedSampleModel
的宽度 -
h
- 结果BandedSampleModel
的高度 - 返回:
-
具有指定宽度和高度的新
BandedSampleModel
。 - 抛出:
-
IllegalArgumentException
- 如果w
或h
等于Integer.MAX_VALUE
或Integer.MIN_VALUE
-
IllegalArgumentException
- 如果dataType
不是支持的数据类型之一
-
createSubsetSampleModel
创建一个具有此BandedSampleModel的一部分波段的新BandedSampleModel。新的BandedSampleModel可以与现有的BandedSampleModel可以使用的任何DataBuffer一起使用。新的BandedSampleModel/DataBuffer组合将表示原始BandedSampleModel/DataBuffer组合的一部分波段的图像。- 覆盖:
-
createSubsetSampleModel
在类ComponentSampleModel
- 参数:
-
bands
- 来自此ComponentSampleModel
的一部分波段 - 返回:
-
使用此
ComponentSampleModel
的一部分波段创建的ComponentSampleModel
。 - 抛出:
-
RasterFormatException
- 如果波段数大于此样本模型中的银行数。 -
IllegalArgumentException
- 如果dataType
不是支持的数据类型之一
-
createDataBuffer
创建一个与此BandedSampleModel对应的DataBuffer,DataBuffer的数据类型、银行数量和大小将与此BandedSampleModel保持一致。- 覆盖:
-
createDataBuffer
在类ComponentSampleModel
中 - 返回:
-
一个
DataBuffer
,其数据类型、存储单元数量和大小与此ComponentSampleModel
一致。 - 抛出:
-
IllegalArgumentException
- 如果dataType
不是受支持的类型之一。
-
getDataElements
返回一个原始数组中单个像素的数据,类型为TransferType。对于BandedSampleModel,这将与数据类型相同,并且每个数组元素将返回一个样本。通常,应将obj传递为null,以便自动创建对象,并且将是正确的原始数据类型。以下代码说明了从由BandedSampleModel
bsm1
描述存储布局的DataBufferdb1
传输一个像素的数据到由BandedSampleModelbsm2
描述存储布局的DataBufferdb2
。传输通常比使用getPixel/setPixel更有效。BandedSampleModel bsm1, bsm2; DataBufferInt db1, db2; bsm2.setDataElements(x, y, bsm1.getDataElements(x, y, null, db1), db2);
如果SampleModels具有相同数量的波段,相应波段具有相同数量的每个样本的位数,并且TransferTypes相同,则在两个DataBuffer/SampleModel对之间传输使用getDataElements/setDataElements是合法的。如果obj非null,则它应该是TransferType类型的原始数组。否则,将抛出ClassCastException。如果坐标不在范围内,或者obj不足以容纳像素数据,则可能会抛出ArrayIndexOutOfBoundsException。
- 覆盖:
-
getDataElements
在类ComponentSampleModel
中 - 参数:
-
x
- 像素位置的X坐标 -
y
- 像素位置的Y坐标 -
obj
- 如果非null,则返回像素数据的原始数组 -
data
- 包含图像数据的DataBuffer - 返回:
- 指定像素的数据。
- 参见:
-
getPixel
返回一个int数组中指定像素的所有样本。如果坐标不在范围内,则可能会抛出ArrayIndexOutOfBoundsException。- 覆盖:
-
getPixel
在类ComponentSampleModel
中 - 参数:
-
x
- 像素位置的X坐标 -
y
- 像素位置的Y坐标 -
iArray
- 如果非null,则将样本返回到此数组中 -
data
- 包含图像数据的DataBuffer - 返回:
- 指定像素的样本。
- 参见:
-
getPixels
返回一个int数组中指定像素矩形的所有样本,每个数据数组元素一个样本。如果坐标不在范围内,则可能会抛出ArrayIndexOutOfBoundsException。- 覆盖:
-
getPixels
在类ComponentSampleModel
中 - 参数:
-
x
- 左上角像素位置的X坐标 -
y
- 左上角像素位置的Y坐标 -
w
- 像素矩形的宽度 -
h
- 像素矩形的高度 -
iArray
- 如果非null,则将样本返回到此数组中 -
data
- 包含图像数据的DataBuffer - 返回:
- 指定区域内像素的样本。
- 参见:
-
getSample
返回位于(x,y)处像素的指定波段的样本作为int。如果坐标不在范围内,则可能会抛出ArrayIndexOutOfBoundsException。- 覆盖:
-
getSample
在类ComponentSampleModel
中 - 参数:
-
x
- 像素位置的X坐标 -
y
- 像素位置的Y坐标 -
b
- 要返回的波段 -
data
- 包含图像数据的DataBuffer - 返回:
- 指定像素的指定波段的样本。
- 参见:
-
getSampleFloat
返回位于(x,y)处像素的指定波段的样本作为float。如果坐标不在范围内,则可能会抛出ArrayIndexOutOfBoundsException。- 覆盖:
-
getSampleFloat
在类ComponentSampleModel
中 - 参数:
-
x
- 像素位置的X坐标 -
y
- 像素位置的Y坐标 -
b
- 要返回的波段 -
data
- 包含图像数据的DataBuffer - 返回:
- 代表指定像素的指定波段的样本的float值。
-
getSampleDouble
返回位于(x,y)处像素的指定波段的样本作为double。如果坐标不在范围内,则可能会抛出ArrayIndexOutOfBoundsException。- 覆盖:
-
getSampleDouble
在类ComponentSampleModel
中 - 参数:
-
x
- 像素位置的X坐标 -
y
- 像素位置的Y坐标 -
b
- 要返回的波段 -
data
- 包含图像数据的DataBuffer - 返回:
- 代表指定像素的指定波段的样本的double值。
-
getSamples
返回一个int数组中指定像素矩形的指定波段的所有样本,每个数据数组元素一个样本。如果坐标不在范围内,则可能会抛出ArrayIndexOutOfBoundsException。- 覆盖:
-
getSamples
在类ComponentSampleModel
中 - 参数:
-
x
- 左上角像素位置的X坐标 -
y
- 左上角像素位置的Y坐标 -
w
- 像素矩形的宽度 -
h
- 像素矩形的高度 -
b
- 要返回的波段 -
iArray
- 如果非null,则将样本返回到此数组中 -
data
- 包含图像数据的DataBuffer - 返回:
- 指定区域内像素的指定波段的样本。
- 参见:
-
setDataElements
从指定的TransferType类型的原始数组中设置指定DataBuffer中单个像素的数据。对于BandedSampleModel,这将与数据类型相同,并且每个数组元素一个样本。以下代码说明了从由BandedSampleModel
bsm1
描述存储布局的DataBufferdb1
传输一个像素的数据到由BandedSampleModelbsm2
描述存储布局的DataBufferdb2
。传输通常比使用getPixel/setPixel更有效。BandedSampleModel bsm1, bsm2; DataBufferInt db1, db2; bsm2.setDataElements(x, y, bsm1.getDataElements(x, y, null, db1), db2);
如果SampleModels具有相同数量的波段,相应波段具有相同数量的每个样本的位数,并且TransferTypes相同,则在两个DataBuffer/SampleModel对之间传输使用getDataElements/setDataElements是合法的。obj必须是TransferType类型的原始数组。否则,将抛出ClassCastException。如果坐标不在范围内,或者obj不足以容纳像素数据,则可能会抛出ArrayIndexOutOfBoundsException。
- 覆盖:
-
setDataElements
在类ComponentSampleModel
- 参数:
-
x
- 像素位置的X坐标 -
y
- 像素位置的Y坐标 -
obj
- 如果非空,则返回此对象中的原始数组 -
data
- 包含图像数据的DataBuffer - 参见:
-
setPixel
使用输入的int数组设置DataBuffer中的像素。如果坐标超出范围,可能会抛出ArrayIndexOutOfBoundsException。- 覆盖:
-
setPixel
在类ComponentSampleModel
- 参数:
-
x
- 像素位置的X坐标 -
y
- 像素位置的Y坐标 -
iArray
- int数组中的输入样本 -
data
- 包含图像数据的DataBuffer - 参见:
-
setPixels
使用包含每个数组元素一个样本的int数组,设置一个矩形像素的所有样本。如果坐标超出范围,可能会抛出ArrayIndexOutOfBoundsException。- 覆盖:
-
setPixels
在类ComponentSampleModel
- 参数:
-
x
- 左上角像素位置的X坐标 -
y
- 左上角像素位置的Y坐标 -
w
- 像素矩形的宽度 -
h
- 像素矩形的高度 -
iArray
- int数组中的输入样本 -
data
- 包含图像数据的DataBuffer - 参见:
-
setSample
使用int输入,在DataBuffer中为位于(x,y)处的像素的指定波段设置样本。如果坐标超出范围,可能会抛出ArrayIndexOutOfBoundsException。- 覆盖:
-
setSample
在类ComponentSampleModel
- 参数:
-
x
- 像素位置的X坐标 -
y
- 像素位置的Y坐标 -
b
- 要设置的波段 -
s
- 作为int的输入样本 -
data
- 包含图像数据的DataBuffer - 参见:
-
setSample
使用float输入,在DataBuffer中为位于(x,y)处的像素的指定波段设置样本。如果坐标超出范围,可能会抛出ArrayIndexOutOfBoundsException。- 覆盖:
-
setSample
在类ComponentSampleModel
- 参数:
-
x
- 像素位置的X坐标 -
y
- 像素位置的Y坐标 -
b
- 要设置的波段 -
s
- 作为float的输入样本 -
data
- 包含图像数据的DataBuffer - 参见:
-
setSample
使用double输入,在DataBuffer中为位于(x,y)处的像素的指定波段设置样本。如果坐标超出范围,可能会抛出ArrayIndexOutOfBoundsException。- 覆盖:
-
setSample
在类ComponentSampleModel
- 参数:
-
x
- 像素位置的X坐标 -
y
- 像素位置的Y坐标 -
b
- 要设置的波段 -
s
- 作为double的输入样本 -
data
- 包含图像数据的DataBuffer - 参见:
-
setSamples
使用int数组中的每个数据数组元素的一个样本,为指定矩形像素的指定波段设置样本。如果坐标超出范围,可能会抛出ArrayIndexOutOfBoundsException。- 覆盖:
-
setSamples
在类ComponentSampleModel
- 参数:
-
x
- 左上角像素位置的X坐标 -
y
- 左上角像素位置的Y坐标 -
w
- 像素矩形的宽度 -
h
- 像素矩形的高度 -
b
- 要设置的波段 -
iArray
- 输入样本数组 -
data
- 包含图像数据的DataBuffer - 参见:
-