java.lang.Object
java.awt.image.SampleModel
java.awt.image.ComponentSampleModel
java.awt.image.BandedSampleModel
此类表示以波段交错方式存储的图像数据,像素的每个样本占用 DataBuffer 的一个数据元素。它是 ComponentSampleModel 的子类,但提供了比 ComponentSampleModel 更有效的访问波段交错图像数据的实现。在处理将每个波段的样本数据存储在 DataBuffer 的不同库中的图像时,通常应使用此类。提供访问器方法以便可以直接操作图像数据。像素跨度是同一扫描线上同一波段的两个样本之间的数据数组元素数。 BandedSampleModel 的像素步幅为 1。扫描线跨度是给定样本与下一个扫描线同一列中的相应样本之间的数据数组元素的数量。带偏移量表示从保存每个带的 DataBuffer 库的第一个数据数组元素到带的第一个样本的数据数组元素的数量。条带从 0 到 N-1 编号。 Bank索引表示数据缓冲区的bank和图像数据的band之间的对应关系。此类支持
TYPE_BYTE 、TYPE_USHORT 、TYPE_SHORT 、TYPE_INT 、TYPE_FLOAT 和 TYPE_DOUBLE 数据类型
-
字段摘要
在类 java.awt.image.ComponentSampleModel 中声明的字段
bandOffsets, bankIndices, numBands, numBanks, pixelStride, scanlineStride在类 java.awt.image.SampleModel 中声明的字段
dataType, height, width -
构造方法总结
构造方法构造方法描述BandedSampleModel(int dataType, int w, int h, int numBands) 构造具有指定参数的 BandedSampleModel。BandedSampleModel(int dataType, int w, int h, int scanlineStride, int[] bankIndices, int[] bandOffsets) 构造具有指定参数的 BandedSampleModel。 -
方法总结
修饰符和类型方法描述createCompatibleSampleModel(int w, int h) 创建具有指定宽度和高度的新 BandedSampleModel。创建一个与这个BandedSampleModel对应的DataBuffer,DataBuffer的数据类型、bank数量、大小都会和这个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 数组中指定像素矩形的所有样本,每个数据数组元素一个样本。intgetSample(int x, int y, int b, DataBuffer data) 以 int 形式返回位于 (x,y) 处像素的指定波段中的样本。doublegetSampleDouble(int x, int y, int b, DataBuffer data) 将位于 (x,y) 处的像素的指定波段中的样本作为双精度值返回。floatgetSampleFloat(int x, int y, int b, DataBuffer data) 将位于 (x,y) 处的像素的指定波段中的样本作为浮点数返回。int[]getSamples(int x, int y, int w, int h, int b, int[] iArray, DataBuffer data) 返回 int 数组中指定像素矩形的指定波段中的样本,每个数据数组元素一个样本。voidsetDataElements(int x, int y, Object obj, DataBuffer data) 从类型为 TransferType 的基本数组设置指定 DataBuffer 中单个像素的数据。voidsetPixel(int x, int y, int[] iArray, DataBuffer data) 使用输入样本的 int 数组设置 DataBuffer 中的像素。voidsetPixels(int x, int y, int w, int h, int[] iArray, DataBuffer data) 从每个数组元素包含一个样本的 int 数组中设置像素矩形的所有样本。voidsetSample(int x, int y, int b, double s, DataBuffer data) 使用双精度输入为 DataBuffer 中位于 (x,y) 处的像素设置指定波段中的样本。voidsetSample(int x, int y, int b, float s, DataBuffer data) 使用浮点输入为 DataBuffer 中位于 (x,y) 处的像素设置指定波段中的样本。voidsetSample(int x, int y, int b, int s, DataBuffer data) 使用 int 输入为 DataBuffer 中位于 (x,y) 的像素设置指定波段中的样本。voidsetSamples(int x, int y, int w, int h, int b, int[] iArray, DataBuffer data) 从每个数据数组元素包含一个样本的 int 数组中为指定的像素矩形设置指定波段中的样本。在类 java.awt.image.ComponentSampleModel 中声明的方法
getBandOffsets, getBankIndices, getNumDataElements, getOffset, getOffset, getPixelStride, getSampleSize, getSampleSize, getScanlineStride在类 java.awt.image.SampleModel 中声明的方法
getDataElements, getDataType, getHeight, getNumBands, getPixel, getPixel, getPixels, getPixels, getSamples, getSamples, getTransferType, getWidth, setDataElements, setPixel, setPixel, setPixels, setPixels, setSamples, setSamples
-
构造方法详细信息
-
BandedSampleModel
public BandedSampleModel(int dataType, int w, int h, int numBands) 构造具有指定参数的 BandedSampleModel。像素跨度将是一个数据元素。扫描线步幅将与宽度相同。每个波段将存储在一个单独的库中,所有波段偏移量都将为零。- 参数:
dataType- 存储样本的数据类型。w- 描述的图像数据区域的宽度(以像素为单位)。h- 描述的图像数据区域的高度(以像素为单位)。numBands- 图像数据的波段数。- 抛出:
IllegalArgumentException- 如果w和h不都大于 0IllegalArgumentException- 如果w和h的乘积大于Integer.MAX_VALUEIllegalArgumentException- 如果numBands不 > 0IllegalArgumentException- 如果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不都大于 0IllegalArgumentException- 如果w和h的乘积大于Integer.MAX_VALUEIllegalArgumentException- 如果scanlineStride小于 0NullPointerException- 如果bankIndices是nullNullPointerException- 如果bandOffsets是nullIllegalArgumentException- 如果bandOffsets.length为 0IllegalArgumentException- 如果bankIndices的长度不等于bandOffsets的长度IllegalArgumentException- 如果bandIndices的任何银行索引小于 0IllegalArgumentException- 如果dataType不是此示例模型支持的数据类型之一
-
-
方法详情
-
createCompatibleSampleModel
创建具有指定宽度和高度的新 BandedSampleModel。新的 BandedSampleModel 将具有与此 BandedSampleModel 相同的波段数、存储数据类型和银行索引。波段偏移量将被压缩,使得波段之间的偏移量将为 w*pixelStride,并且所有波段偏移量的最小值为零。- 重写:
createCompatibleSampleModel在类ComponentSampleModel中- 参数:
w- 结果BandedSampleModel的宽度h- 生成的BandedSampleModel的高度- 返回:
-
具有指定宽度和高度的新
BandedSampleModel。 - 抛出:
IllegalArgumentException- 如果w或h等于Integer.MAX_VALUE或Integer.MIN_VALUEIllegalArgumentException- 如果dataType不是受支持的数据类型之一
-
createSubsetSampleModel
使用此 BandedSampleModel 的波段子集创建一个新的 BandedSampleModel。新的 BandedSampleModel 可以与现有 BandedSampleModel 可以使用的任何 DataBuffer 一起使用。新的 BandedSampleModel/DataBuffer 组合将表示具有原始 BandedSampleModel/DataBuffer 组合的波段子集的图像。- 重写:
createSubsetSampleModel在类ComponentSampleModel中- 参数:
bands- 来自这个ComponentSampleModel的波段子集- 返回:
ComponentSampleModel使用来自此ComponentSampleModel的波段子集创建。- 抛出:
RasterFormatException- 如果波段数大于此样本模型中的银行数。IllegalArgumentException- 如果dataType不是受支持的数据类型之一
-
createDataBuffer
创建一个与这个BandedSampleModel对应的DataBuffer,DataBuffer的数据类型、bank数量、大小都会和这个BandedSampleModel保持一致。- 重写:
createDataBuffer在类ComponentSampleModel中- 返回:
-
a
DataBuffer其数据类型、bank 数量和大小与此ComponentSampleModel一致。 - 抛出:
IllegalArgumentException- 如果dataType不是受支持的类型之一。
-
getDataElements
返回类型为 TransferType 的原始数组中单个像素的数据。对于 BandedSampleModel,这将与数据类型相同,并且每个数组元素将返回一个样本。通常,obj 应作为 null 传入,以便自动创建 Object 并具有正确的原始数据类型。以下代码说明了将一个像素的数据从 DataBuffer
db1传输到 DataBufferdb2,其存储布局由 BandedSampleModelbsm1描述,DataBufferdb2的存储布局由 BandedSampleModelbsm2描述。传输通常比使用 getPixel/setPixel 更有效。BandedSampleModel bsm1, bsm2; DataBufferInt db1, db2; bsm2.setDataElements(x, y, bsm1.getDataElements(x, y, null, db1), db2);如果 SampleModels 具有相同数量的波段,相应的波段具有相同的每个样本位数,并且 TransferTypes 相同,则使用 getDataElements/setDataElements 在两个 DataBuffer/SampleModel 对之间传输是合法的。如果 obj 不为空,则它应该是 TransferType 类型的原始数组。否则,将抛出 ClassCastException。如果坐标不在边界内,或者如果 obj 不为空且不够大以容纳像素数据,则可能会抛出 ArrayIndexOutOfBoundsException。
- 重写:
getDataElements在类ComponentSampleModel中- 参数:
x- 像素位置的X坐标y- 像素位置的Y坐标obj- 如果非空,则返回像素数据的原始数组。data- 包含图像数据的 DataBuffer。- 返回:
- 指定像素的数据。
- 参见:
-
getPixel
返回 int 数组中指定像素的所有样本。如果坐标不在边界内,则可能会抛出 ArrayIndexOutOfBoundsException。- 重写:
getPixel在类ComponentSampleModel中- 参数:
x- 像素位置的X坐标y- 像素位置的Y坐标iArray- 如果非空,则返回此数组中的样本data- 包含图像数据的 DataBuffer- 返回:
- 指定像素的样本。
- 参见:
-
getPixels
返回 int 数组中指定像素矩形的所有样本,每个数据数组元素一个样本。如果坐标不在边界内,则可能会抛出 ArrayIndexOutOfBoundsException。- 重写:
getPixels在类ComponentSampleModel中- 参数:
x- 左上角像素位置的X坐标y- 左上角像素位置的 Y 坐标w- 像素矩形的宽度h- 像素矩形的高度iArray- 如果非空,则返回此数组中的样本data- 包含图像数据的 DataBuffer- 返回:
- 指定区域内像素的样本。
- 参见:
-
getSample
以 int 形式返回位于 (x,y) 处像素的指定波段中的样本。如果坐标不在边界内,则可能会抛出 ArrayIndexOutOfBoundsException。- 重写:
getSample在类ComponentSampleModel中- 参数:
x- 像素位置的X坐标y- 像素位置的Y坐标b- 乐队回归data- 包含图像数据的 DataBuffer- 返回:
- 指定像素的指定波段中的样本。
- 参见:
-
getSampleFloat
将位于 (x,y) 处的像素的指定波段中的样本作为浮点数返回。如果坐标不在边界内,则可能会抛出 ArrayIndexOutOfBoundsException。- 重写:
getSampleFloat在类ComponentSampleModel中- 参数:
x- 像素位置的X坐标y- 像素位置的Y坐标b- 乐队回归data- 包含图像数据的 DataBuffer- 返回:
- 一个浮点值,表示指定像素的指定波段中的样本。
-
getSampleDouble
将位于 (x,y) 处的像素的指定波段中的样本作为双精度值返回。如果坐标不在边界内,则可能会抛出 ArrayIndexOutOfBoundsException。- 重写:
getSampleDouble在类ComponentSampleModel中- 参数:
x- 像素位置的X坐标y- 像素位置的Y坐标b- 乐队回归data- 包含图像数据的 DataBuffer- 返回:
- 一个 double 值,表示指定像素的指定波段中的样本。
-
getSamples
返回 int 数组中指定像素矩形的指定波段中的样本,每个数据数组元素一个样本。如果坐标不在边界内,则可能会抛出 ArrayIndexOutOfBoundsException。- 重写:
getSamples在类ComponentSampleModel中- 参数:
x- 左上角像素位置的X坐标y- 左上角像素位置的 Y 坐标w- 像素矩形的宽度h- 像素矩形的高度b- 乐队回归iArray- 如果非空,则返回此数组中的样本data- 包含图像数据的 DataBuffer- 返回:
- 指定区域内像素的指定波段中的样本。
- 参见:
-
setDataElements
从类型为 TransferType 的基本数组设置指定 DataBuffer 中单个像素的数据。对于 BandedSampleModel,这将与数据类型相同,并且每个数组元素传输一个样本。以下代码说明了将一个像素的数据从 DataBuffer
db1传输到 DataBufferdb2,其存储布局由 BandedSampleModelbsm1描述,DataBufferdb2的存储布局由 BandedSampleModelbsm2描述。传输通常比使用 getPixel/setPixel 更有效。BandedSampleModel bsm1, bsm2; DataBufferInt db1, db2; bsm2.setDataElements(x, y, bsm1.getDataElements(x, y, null, db1), db2);如果 SampleModels 具有相同数量的波段,相应的波段具有相同的每个样本位数,并且 TransferTypes 相同,则使用 getDataElements/setDataElements 在两个 DataBuffer/SampleModel 对之间传输是合法的。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
使用浮点输入为 DataBuffer 中位于 (x,y) 处的像素设置指定波段中的样本。如果坐标不在边界内,则可能会抛出 ArrayIndexOutOfBoundsException。- 重写:
setSample在类ComponentSampleModel中- 参数:
x- 像素位置的X坐标y- 像素位置的Y坐标b- 要设置的频段s- 输入样本为浮点数data- 包含图像数据的 DataBuffer- 参见:
-
setSample
使用双精度输入为 DataBuffer 中位于 (x,y) 处的像素设置指定波段中的样本。如果坐标不在边界内,则可能会抛出 ArrayIndexOutOfBoundsException。- 重写:
setSample在类ComponentSampleModel中- 参数:
x- 像素位置的X坐标y- 像素位置的Y坐标b- 要设置的频段s- 输入样本为双精度data- 包含图像数据的 DataBuffer- 参见:
-
setSamples
从每个数据数组元素包含一个样本的 int 数组中为指定的像素矩形设置指定波段中的样本。如果坐标不在边界内,则可能会抛出 ArrayIndexOutOfBoundsException。- 重写:
setSamples在类ComponentSampleModel中- 参数:
x- 左上角像素位置的X坐标y- 左上角像素位置的 Y 坐标w- 像素矩形的宽度h- 像素矩形的高度b- 要设置的频段iArray- 输入样本数组data- 包含图像数据的 DataBuffer- 参见:
-