- java.lang.Object
-
- java.awt.image.SampleModel
-
- java.awt.image.ComponentSampleModel
-
- 已知直接子类:
-
BandedSampleModel
,PixelInterleavedSampleModel
public class ComponentSampleModel extends SampleModel
该类表示存储的图像数据,使得像素的每个样本占据DataBuffer的一个数据元素。 它存储构成N个独立数据阵列元素中的像素的N个样本。 不同的波段可能位于DataBuffer的不同库中。 提供了访问器方法,以便可以直接操作图像数据。 该类可以支持不同种类的交织,例如频带交织,扫描线交织和像素交织。 像素跨度是同一扫描线上相同频带的两个样本之间的数据阵列元素的数量。 扫描线步幅是给定样本与下一扫描线的同一列中的相应样本之间的数据阵列元素的数量。 频带偏移表示从将每个频带保持到频带的第一个采样的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
,
-
-
字段汇总
字段 变量和类型 字段 描述 protected int[]
bandOffsets
数据数组元素中所有波段的偏移量。protected int[]
bankIndices
存储一系列图像数据的每个银行的索引。protected int
numBands
此ComponentSampleModel
的频段数。protected int
numBanks
这个银行的数量在ComponentSampleModel
。protected int
pixelStride
由ComponentSampleModel描述的图像数据区域的像素步幅(在数据阵列元素中)。protected int
scanlineStride
此ComponentSampleModel描述的图像数据区域的行跨度(在数据数组元素中)。-
声明的属性在类 java.awt.image.SampleModel
dataType, height, width
-
-
构造方法摘要
构造方法 构造器 描述 ComponentSampleModel(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。
-
方法摘要
所有方法 实例方法 具体的方法 变量和类型 方法 描述 SampleModel
createCompatibleSampleModel(int w, int h)
创建具有指定宽度和高度的新ComponentSampleModel
。DataBuffer
createDataBuffer()
创建一个DataBuffer
,对应于这个ComponentSampleModel
。SampleModel
createSubsetSampleModel(int[] bands)
使用此ComponentSampleModel的band子集创建新的ComponentSampleModel。int[]
getBandOffsets()
返回所有波段的波段偏移。int[]
getBankIndices()
返回所有波段的银行索引。Object
getDataElements(int x, int y, Object obj, DataBuffer data)
返回类型为TransferType
的基本数组中单个像素的数据。int
getNumDataElements()
int
getOffset(int x, int y)
获取第一个像素带(x,y)的偏移量。int
getOffset(int x, int y, int b)
获取像素(x,y)的band 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数组中指定矩形像素的所有样本,每个数组元素一个样本。int
getPixelStride()
返回此ComponentSampleModel的像素跨度。int
getSample(int x, int y, int b, DataBuffer data)
对于位于(x,y)的像素,在指定band中的样本返回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)的像素的指定band中的样本返回为float。int[]
getSamples(int x, int y, int w, int h, int b, int[] iArray, DataBuffer data)
返回int数组中指定矩形像素的指定band中的样本,每个数据数组元素一个样本。int[]
getSampleSize()
返回所有band的每个样本的位数。int
getSampleSize(int band)
返回指定band的每个样本的位数。int
getScanlineStride()
返回此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)
使用浮点输入为DataBuffer
位于(x,y)的像素设置指定波段的样本。void
setSample(int x, int y, int b, int s, DataBuffer data)
使用int作为输入,为DataBuffer
位于(x,y)的像素设置指定band中的样本。void
setSamples(int x, int y, int w, int h, int b, int[] iArray, DataBuffer data)
从包含每个数据数组元素一个样本的int数组中为指定的像素矩形设置指定band中的样本。-
声明方法的类 java.awt.image.SampleModel
getDataElements, getDataType, getHeight, getNumBands, getPixel, getPixel, getPixels, getPixels, getSamples, getSamples, getTransferType, getWidth, setDataElements, setPixel, setPixel, setPixels, setPixels, setSamples, setSamples
-
-
-
-
字段详细信息
-
bandOffsets
protected int[] bandOffsets
数据数组元素中所有波段的偏移量。
-
bankIndices
protected int[] bankIndices
存储一系列图像数据的每个银行的索引。
-
numBands
protected int numBands
这个ComponentSampleModel
的乐队数量。
-
numBanks
protected int numBanks
这个银行的数量在ComponentSampleModel
。
-
scanlineStride
protected int scanlineStride
此ComponentSampleModel描述的图像数据区域的行跨度(在数据数组元素中)。
-
pixelStride
protected int pixelStride
由ComponentSampleModel描述的图像数据区域的像素步幅(在数据阵列元素中)。
-
-
构造方法详细信息
-
ComponentSampleModel
public ComponentSampleModel(int dataType, int w, int h, int pixelStride, int scanlineStride, int[] bandOffsets)
使用指定的参数构造ComponentSampleModel。 band的数量将由bandOffsets数组的长度给出。 所有波段都将存储在DataBuffer的第一个库中。- 参数
-
dataType
- 用于存储样本的数据类型 -
w
- 所描述的图像数据区域的宽度(以像素为单位) -
h
- 所描述的图像数据区域的高度(以像素为单位) -
pixelStride
- 描述的图像数据区域的像素步幅 -
scanlineStride
- 描述的图像数据区域的行scanlineStride
-
bandOffsets
- 所有频段的偏移量 - 异常
-
IllegalArgumentException
- 如果w
或h
不大于0 -
IllegalArgumentException
- 如果pixelStride
小于0 -
IllegalArgumentException
- 如果scanlineStride
小于0 -
IllegalArgumentException
- 如果numBands
小于1 -
IllegalArgumentException
- 如果w
和h
的产品大于Integer.MAX_VALUE
-
IllegalArgumentException
- 如果dataType
不是受支持的数据类型之一
-
ComponentSampleModel
public ComponentSampleModel(int dataType, int w, int h, int pixelStride, int scanlineStride, int[] bankIndices, int[] bandOffsets)
使用指定的参数构造ComponentSampleModel。 band的数量将由bandOffsets数组的长度给出。 不同的频带可以存储在DataBuffer的不同存储体中。- 参数
-
dataType
- 用于存储样本的数据类型 -
w
- 所描述的图像数据区域的宽度(以像素为单位) -
h
- 所描述的图像数据区域的高度(以像素为单位) -
pixelStride
- 描述的图像数据区域的像素跨度 -
scanlineStride
- 描述的图像数据区域的行scanlineStride
-
bankIndices
- 所有波段的银行指数 -
bandOffsets
- 所有频段的频段偏移 - 异常
-
IllegalArgumentException
- 如果w
或h
不大于0 -
IllegalArgumentException
- 如果pixelStride
小于0 -
IllegalArgumentException
- 如果scanlineStride
小于0 -
IllegalArgumentException
- 如果长度bankIndices
不等于bankOffsets
的长度 -
IllegalArgumentException
-如有的银行指数bandIndices
小于0 -
IllegalArgumentException
- 如果dataType
不是受支持的数据类型之一
-
-
方法详细信息
-
createCompatibleSampleModel
public SampleModel createCompatibleSampleModel(int w, int h)
创建具有指定宽度和高度的新ComponentSampleModel
。 新SampleModel
将具有相同数目的频带,存储数据类型的交织方案,以及像素跨度,因为这SampleModel
。- Specified by:
-
createCompatibleSampleModel
in classSampleModel
- 参数
-
w
- 生成的SampleModel
的宽度 -
h
- 结果SampleModel
的高度 - 结果
-
具有指定大小的新
ComponentSampleModel
- 异常
-
IllegalArgumentException
- 如果w
或h
不大于0
-
createSubsetSampleModel
public SampleModel createSubsetSampleModel(int[] bands)
使用此ComponentSampleModel的band子集创建新的ComponentSampleModel。 新的ComponentSampleModel可以与现有ComponentSampleModel可以使用的任何DataBuffer一起使用。 新的ComponentSampleModel / DataBuffer组合将表示具有原始ComponentSampleModel / DataBuffer组合的波段子集的图像。- Specified by:
-
createSubsetSampleModel
类别SampleModel
- 参数
-
bands
- 此ComponentSampleModel
一个频段子集 - 结果
-
一个
ComponentSampleModel
与乐队从这个子集创建ComponentSampleModel
。
-
createDataBuffer
public DataBuffer createDataBuffer()
创建一个DataBuffer
,对应于这个ComponentSampleModel
。DataBuffer
对象的数据类型,库数和大小与此ComponentSampleModel
一致。- Specified by:
-
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)的band b的偏移量。 可以从DataBuffer data
检索带b
的DataBuffer data
,其中ComponentSampleModel csm
为data.getElem(csm.getOffset(x, y, b));
- 参数
-
x
- 指定像素的X位置 -
y
- 指定像素的Y位置 -
b
- 指定的乐队 - 结果
- 指定像素的指定波段的偏移量。
-
getSampleSize
public final int[] getSampleSize()
返回所有band的每个样本的位数。- Specified by:
-
getSampleSize
类SampleModel
- 结果
- 一个数组,包含所有波段的每个采样的位数,其中数组中的每个元素代表一个波段。
-
getSampleSize
public final int getSampleSize(int band)
返回指定band的每个样本的位数。- Specified by:
-
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
,这与频段数相同。- Specified by:
-
getNumDataElements
类SampleModel
- 结果
-
使用
getDataElements
和setDataElements
方法传输像素所需的数据元素数。 - 另请参见:
-
SampleModel.getNumDataElements()
,SampleModel.getNumBands()
-
getDataElements
public Object getDataElements(int x, int y, Object obj, DataBuffer data)
返回类型为TransferType
的基本数组中单个像素的数据。 对于ComponentSampleModel
,这与数据类型相同,并且每个数组元素返回一个样本。 通常,obj
应作为null
,以便Object
自动创建并且是正确的基本数据类型。以下代码说明了将一个像素的数据从
DataBuffer db1
(其存储布局由ComponentSampleModel csm1
描述)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);
如果SampleModel
对象具有相同的频带数,则使用getDataElements
和setDataElements
在两个DataBuffer/SampleModel
对之间进行传输是合法的,相应的频带每个样本具有相同的位数,并且TransferType
是相同的。如果
obj
不是null
,则它应该是类型为TransferType
的基本数组。 否则,抛出ClassCastException
。 一个ArrayIndexOutOfBoundsException
如果坐标不在边界可能被抛出,或者如果obj
不是null
并没有大到足以容纳像素数据。- Specified by:
-
getDataElements
类SampleModel
- 参数
-
x
- 像素位置的X坐标 -
y
- 像素位置的Y坐标 -
obj
- 如果null
,则返回像素数据的基本数组 -
data
- 包含图像数据的DataBuffer
- 结果
- 指定像素的数据
- 异常
-
NullPointerException
- 如果数据为空。 -
ArrayIndexOutOfBoundsException
- 如果坐标不在边界内,或者obj太小而无法保持输出。 - 另请参见:
-
setDataElements(int, int, Object, DataBuffer)
-
getPixel
public int[] getPixel(int x, int y, int[] iArray, DataBuffer data)
返回int数组中指定像素的所有样本,每个数组元素一个样本。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException
。- 重写:
-
getPixel
在类SampleModel
- 参数
-
x
- 像素位置的X坐标 -
y
- 像素位置的Y坐标 -
iArray
- 如果为非null,则返回此数组中的样本 -
data
- 包含图像数据的DataBuffer - 结果
- 指定像素的样本。
- 异常
-
NullPointerException
- 如果数据为空。 -
ArrayIndexOutOfBoundsException
- 如果坐标不在边界内,或者iArray太小而无法保持输出。 - 另请参见:
-
setPixel(int, int, int[], DataBuffer)
-
getPixels
public int[] getPixels(int x, int y, int w, int h, int[] iArray, DataBuffer data)
返回int数组中指定矩形像素的所有样本,每个数组元素一个样本。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException
。- 重写:
-
getPixels
,类SampleModel
- 参数
-
x
- 左上角像素位置的X坐标 -
y
- 左上角像素位置的Y坐标 -
w
- 像素矩形的宽度 -
h
- 像素矩形的高度 -
iArray
- 如果为非null,则返回此数组中的样本 -
data
- 包含图像数据的DataBuffer - 结果
- 指定区域内像素的样本。
- 另请参见:
-
setPixels(int, int, int, int, int[], DataBuffer)
-
getSample
public int getSample(int x, int y, int b, DataBuffer data)
对于位于(x,y)的像素,在指定band中的样本返回int。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException
。- Specified by:
-
getSample
在类SampleModel
- 参数
-
x
- 像素位置的X坐标 -
y
- 像素位置的Y坐标 -
b
- 乐队返回 -
data
- 包含图像数据的DataBuffer
- 结果
- 指定像素中指定像素的样本
- 另请参见:
-
setSample(int, int, int, int, DataBuffer)
-
getSampleFloat
public float getSampleFloat(int x, int y, int b, DataBuffer data)
将位于(x,y)的像素的指定band中的样本返回为float。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException
。- 重写:
-
getSampleFloat
在类SampleModel
- 参数
-
x
- 像素位置的X坐标 -
y
- 像素位置的Y坐标 -
b
- 乐队返回 -
data
- 包含图像数据的DataBuffer - 结果
- 一个浮点值,表示指定像素中指定像素的样本。
-
getSampleDouble
public double getSampleDouble(int x, int y, int b, DataBuffer data)
将位于(x,y)的像素的指定波段中的样本返回为double。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException
。- 重写:
-
getSampleDouble
,类SampleModel
- 参数
-
x
- 像素位置的X坐标 -
y
- 像素位置的Y坐标 -
b
- 乐队返回 -
data
- 包含图像数据的DataBuffer - 结果
- 一个double值,表示指定像素中指定像素的样本。
-
getSamples
public int[] getSamples(int x, int y, int w, int h, int b, int[] iArray, DataBuffer data)
返回int数组中指定矩形像素的指定band中的样本,每个数据数组元素一个样本。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException
。- 重写:
-
getSamples
类SampleModel
- 参数
-
x
- 左上角像素位置的X坐标 -
y
- 左上角像素位置的Y坐标 -
w
- 像素矩形的宽度 -
h
- 像素矩形的高度 -
b
- 乐队返回 -
iArray
- 如果非null
,则返回此数组中的样本 -
data
- 包含图像数据的DataBuffer
- 结果
- 指定像素的指定波段中的样本
- 另请参见:
-
setSamples(int, int, int, int, int, int[], DataBuffer)
-
setDataElements
public void setDataElements(int x, int y, Object obj, DataBuffer data)
从类型为TransferType
的基本数组中设置指定DataBuffer
单个像素的数据。 对于ComponentSampleModel
,这与数据类型相同,并且每个数组元素传输一个样本。以下代码说明了将一个像素的数据从
DataBuffer db1
(其存储布局由ComponentSampleModel csm1
描述)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);
如果SampleModel
对象具有相同数量的波段,相应的波段每个采样具有相同的比特数,并且TransferType
是相同的,则使用getDataElements
和setDataElements
在两个DataBuffer/SampleModel
对之间进行传输是合法的。甲
ClassCastException
如果被抛出obj
不是类型的基本数组TransferType
。 一个ArrayIndexOutOfBoundsException
如果坐标不在边界可能被抛出,或者如果obj
不够大,无法容纳像素数据。- Specified by:
-
setDataElements
在课程SampleModel
- 参数
-
x
- 像素位置的X坐标 -
y
- 像素位置的Y坐标 -
obj
- 包含像素数据的原始数组 -
data
- 包含图像数据的DataBuffer - 另请参见:
-
getDataElements(int, int, Object, DataBuffer)
-
setPixel
public void setPixel(int x, int y, int[] iArray, DataBuffer data)
使用int数组样本为输入设置DataBuffer
的像素。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException
。- 重写:
-
setPixel
在类SampleModel
- 参数
-
x
- 像素位置的X坐标 -
y
- 像素位置的Y坐标 -
iArray
- int数组中的输入样本 -
data
- 包含图像数据的DataBuffer - 另请参见:
-
getPixel(int, int, int[], DataBuffer)
-
setPixels
public void setPixels(int x, int y, int w, int h, int[] iArray, DataBuffer data)
为每个数组元素包含一个样本的int数组设置像素矩形的所有样本。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException
。- 重写:
-
setPixels
在类SampleModel
- 参数
-
x
- 左上角像素位置的X坐标 -
y
- 左上角像素位置的Y坐标 -
w
- 像素矩形的宽度 -
h
- 像素矩形的高度 -
iArray
- int数组中的输入样本 -
data
- 包含图像数据的DataBuffer - 另请参见:
-
getPixels(int, int, int, int, int[], DataBuffer)
-
setSample
public void setSample(int x, int y, int b, int s, DataBuffer data)
使用int作为输入,为DataBuffer
位于(x,y)的像素设置指定波段中的样本。 如果坐标不在边界内,则可能会抛出ArrayIndexOutOfBoundsException
。- Specified by:
-
setSample
类SampleModel
- 参数
-
x
- 像素位置的X坐标 -
y
- 像素位置的Y坐标 -
b
- 要设置的乐队 -
s
- 输入样本为int -
data
- 包含图像数据的DataBuffer - 另请参见:
-
getSample(int, int, int, DataBuffer)
-
setSample
public void setSample(int x, int y, int b, float s, DataBuffer data)
使用浮点输入为DataBuffer
位于(x,y)的像素设置指定波段的样本。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException
。- 重写:
-
setSample
类SampleModel
- 参数
-
x
- 像素位置的X坐标 -
y
- 像素位置的Y坐标 -
b
- 要设置的乐队 -
s
- 输入样本为浮点数 -
data
- 包含图像数据的DataBuffer - 另请参见:
-
getSample(int, int, int, DataBuffer)
-
setSample
public void setSample(int x, int y, int b, double s, DataBuffer data)
使用double输入为DataBuffer
位于(x,y)的像素设置指定波段的样本。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException
。- 重写:
-
setSample
在类SampleModel
- 参数
-
x
- 像素位置的X坐标 -
y
- 像素位置的Y坐标 -
b
- 要设置的乐队 -
s
- 输入样本为double -
data
- 包含图像数据的DataBuffer - 另请参见:
-
getSample(int, int, int, DataBuffer)
-
setSamples
public void setSamples(int x, int y, int w, int h, int b, int[] iArray, DataBuffer data)
从包含每个数据数组元素一个样本的int数组中为指定的像素矩形设置指定band中的样本。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException
。- 重写:
-
setSamples
在类SampleModel
- 参数
-
x
- 左上角像素位置的X坐标 -
y
- 左上角像素位置的Y坐标 -
w
- 像素矩形的宽度 -
h
- 像素矩形的高度 -
b
- 要设置的乐队 -
iArray
- int数组中的输入样本 -
data
- 包含图像数据的DataBuffer - 另请参见:
-
getSamples(int, int, int, int, int, int[], DataBuffer)
-
-