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
FieldsModifier 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
ConstructorsConstructorDescriptionComponentSampleModel(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)方法传输像素所需的数据元素数量。intgetOffset(int x, int y) 获取像素(x,y)的第一个波段的偏移量。intgetOffset(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的像素步幅。intgetSample(int x, int y, int b, DataBuffer data) 返回位于(x,y)处像素的指定波段的样本作为int。doublegetSampleDouble(int x, int y, int b, DataBuffer data) 返回位于(x,y)处像素的指定波段的样本作为double。floatgetSampleFloat(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 intgetSampleSize(int band) 返回指定波段的每个样本的位数。final int返回此ComponentSampleModel的扫描线步幅。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) 使用double设置DataBuffer中(x,y)处指定波段的像素的样本。voidsetSample(int x, int y, int b, float s, DataBuffer data) 使用float设置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数组设置指定像素矩形的指定波段的所有样本。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)的第一个波段的偏移量。可以使用DataBufferdata和ComponentSampleModelcsm从中检索第一个波段的样本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 - 参见:
-