- java.lang.Object
-
- java.awt.image.SampleModel
-
- java.awt.image.ComponentSampleModel
-
- java.awt.image.BandedSampleModel
-
public final class BandedSampleModel extends ComponentSampleModel
该类表示以频带交错方式存储的图像数据,并且像素的每个样本占据DataBuffer的一个数据元素。 它对ComponentSampleModel进行子类化,但提供了一种比ComponentSampleModel提供的访问频带交错图像数据更有效的实现。 通常在使用存储DataBuffer不同库中每个频段的样本数据的图像时,应使用该类。 提供访问方法,以便可以直接操纵图像数据。 像素幅度是同一扫描线上同一频带的两个样本之间的数据数组元素数。 BandedSampleModel的像素步幅是一个。 扫描线步幅是给定样本与下一个扫描线同一列中相应样本之间的数据数组元素数。 带偏移表示来自保持每个频带的DataBuffer组的第一数据阵列元素到该频带的第一个样本的数据数组元素的数量。 频带从0到N-1编号。 存储体索引表示数据缓冲器的存储体与图像数据的区段之间的对应关系。 该类支持TYPE_BYTE
,TYPE_USHORT
,TYPE_SHORT
,TYPE_INT
,TYPE_FLOAT
,并TYPE_DOUBLE
个数据类型
-
-
Field Summary
-
Fields inherited from class java.awt.image.ComponentSampleModel
bandOffsets, bankIndices, numBands, numBanks, pixelStride, scanlineStride
-
Fields inherited from class java.awt.image.SampleModel
dataType, height, width
-
-
构造方法摘要
构造方法 Constructor 描述 BandedSampleModel(int dataType, int w, int h, int numBands)
构造带指定参数的BandedSampleModel。BandedSampleModel(int dataType, int w, int h, int scanlineStride, int[] bankIndices, int[] bandOffsets)
构造带指定参数的BandedSampleModel。
-
方法摘要
所有方法 接口方法 具体的方法 Modifier and Type 方法 描述 SampleModel
createCompatibleSampleModel(int w, int h)
创建一个带有指定宽度和高度的新的BandedSampleModel。DataBuffer
createDataBuffer()
创建对应于此BandedSampleModel的DataBuffer,DataBuffer的数据类型,数量和大小将与此BandedSampleModel一致。SampleModel
createSubsetSampleModel(int[] bands)
创建一个带有BandedSampleModel的带子集的新BandedSampleModel。Object
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)的像素的指定带中的样本返回为双倍。float
getSampleFloat(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数组中指定的像素矩形的指定带中的样本,每个数据数组元素一个样本。int
hashCode()
返回对象的哈希码值。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)
对于位于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)处的像素的指定波段设置一个样本。void
setSamples(int x, int y, int w, int h, int b, int[] iArray, DataBuffer data)
从包含每个数据数组元素一个样本的int数组中为指定的像素矩形设置样本。-
Methods inherited from class java.awt.image.ComponentSampleModel
equals, getBandOffsets, getBankIndices, getNumDataElements, getOffset, getOffset, getPixelStride, getSampleSize, getSampleSize, getScanlineStride
-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from class 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
- 如果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
- 如果dataType
不是支持的数据类型之一
-
-
方法详细信息
-
createCompatibleSampleModel
public SampleModel createCompatibleSampleModel(int w, int h)
创建一个带有指定宽度和高度的新的BandedSampleModel。 新的BandedSampleModel将具有与BandedSampleModel相同数量的频带,存储数据类型和银行索引。 频带偏移将被压缩,使得频带之间的偏移将为w * pixelStride,并且所有频带偏移的最小值为零。- 重写:
-
createCompatibleSampleModel
在ComponentSampleModel
- 参数
-
w
- 所得的宽度BandedSampleModel
-
h
- 所得的高度BandedSampleModel
- 结果
-
一个新的
BandedSampleModel
具有指定的宽度和高度。 - 异常
-
IllegalArgumentException
- 如果w
或h
等于Integer.MAX_VALUE
或Integer.MIN_VALUE
-
IllegalArgumentException
- 如果dataType
不是支持的数据类型之一
-
createSubsetSampleModel
public SampleModel createSubsetSampleModel(int[] bands)
创建一个带有BandedSampleModel的带子集的新BandedSampleModel。 新的BandedSampleModel可以与现有的BandedSampleModel可以一起使用的任何DataBuffer使用。 新的BandedSampleModel / DataBuffer组合将表示具有原始BandedSampleModel / DataBuffer组合的频带子集的图像。- 重写:
-
createSubsetSampleModel
在ComponentSampleModel
- 参数
-
bands
- 来自这个ComponentSampleModel
的乐队的一个子集 - 结果
-
一个
ComponentSampleModel
用这个ComponentSampleModel
的带子子集创建。 - 异常
-
RasterFormatException
- 如果带的数量大于此样本模型中的银行数量。 -
IllegalArgumentException
- 如果dataType
不是支持的数据类型之一
-
createDataBuffer
public DataBuffer createDataBuffer()
创建对应于此BandedSampleModel的DataBuffer,DataBuffer的数据类型,数量和大小将与此BandedSampleModel一致。- 重写:
-
createDataBuffer
在ComponentSampleModel
- 结果
-
一个
DataBuffer
其数据类型,数量和大小与此ComponentSampleModel
一致。 - 异常
-
IllegalArgumentException
- 如果dataType
不是支持的类型之一。
-
getDataElements
public Object getDataElements(int x, int y, Object obj, DataBuffer data)
返回TransferType类型的原始数组中单个像素的数据。 对于BandedSampleModel,它将与数据类型相同,每个数组元素将返回一个样本。 一般来说,obj应该以null的形式传入,这样Object将被自动创建,并且将是正确的原始数据类型。下面的代码说明从DataBuffer中为一个像素的数据
db1
,其存储布局通过的BandedSampleModel描述bsm1
到DataBufferdb2
,其存储布局通过的BandedSampleModel描述bsm2
。 传输通常比使用getPixel / setPixel更有效率。BandedSampleModel bsm1, bsm2; DataBufferInt db1, db2; bsm2.setDataElements(x, y, bsm1.getDataElements(x, y, null, db1), db2);
如果SampleModels具有相同数量的频带,则使用getDataElements / setDataElements在两个DataBuffer / SampleModel对之间传输是合法的,相应的频带具有与每个样本相同的位数,TransferTypes是相同的。如果obj不为空,则它应该是TransferType类型的原始数组。 否则,抛出ClassCastException。 如果坐标不在边界中,或者如果obj不为空且不够大以容纳像素数据,则可能抛出ArrayIndexOutOfBoundsException。
- 重写:
-
getDataElements
在ComponentSampleModel
- 参数
-
x
- 像素位置的X坐标 -
y
- 像素位置的Y坐标 -
obj
- 如果非空,则返回像素数据的原始数组。 -
data
- 包含图像数据的DataBuffer。 - 结果
- 指定像素的数据。
- 另请参见:
-
setDataElements(int, int, Object, DataBuffer)
-
getPixel
public int[] getPixel(int x, int y, int[] iArray, DataBuffer data)
返回int数组中指定像素的所有样本。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException。- 重写:
-
getPixel
在ComponentSampleModel
- 参数
-
x
- 像素位置的X坐标 -
y
- 像素位置的Y坐标 -
iArray
- 如果非空,则返回此数组中的样本 -
data
- 包含图像数据的DataBuffer - 结果
- 指定像素的样本。
- 另请参见:
-
setPixel(int, int, int[], DataBuffer)
-
getPixels
public int[] getPixels(int x, int y, int w, int h, int[] iArray, DataBuffer data)
返回int数组中指定的像素矩形的所有样本,每个数据数组元素一个样本。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException。- 重写:
-
getPixels
在ComponentSampleModel
- 参数
-
x
- 左上角像素位置的X坐标 -
y
- 左上角像素位置的Y坐标 -
w
- 像素矩形的宽度 -
h
- 像素矩形的高度 -
iArray
- 如果非空,则返回此数组中的样本 -
data
- 包含图像数据的DataBuffer - 结果
- 指定区域内像素的样本。
- 另请参见:
-
setPixels(int, int, int, int, int[], DataBuffer)
-
getSample
public int getSample(int x, int y, int b, DataBuffer data)
返回为位于(x,y)处的像素的指定带中的样本int。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException。- 重写:
-
getSample
在ComponentSampleModel
- 参数
-
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)处的像素的指定带中的样本作为浮点返回。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException。- 重写:
-
getSampleFloat
在ComponentSampleModel
- 参数
-
x
- 像素位置的X坐标 -
y
- 像素位置的Y坐标 -
b
- 乐队返回 -
data
- 包含图像数据的DataBuffer - 结果
- 表示指定像素的指定频带中的样本的浮点值。
-
getSampleDouble
public double getSampleDouble(int x, int y, int b, DataBuffer data)
将位于(x,y)的像素的指定带中的样本返回为双倍。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException。- 重写:
-
getSampleDouble
在ComponentSampleModel
- 参数
-
x
- 像素位置的X坐标 -
y
- 像素位置的Y坐标 -
b
- 乐队返回 -
data
- 包含图像数据的DataBuffer - 结果
- 表示指定像素的指定频带中的样本的双重值。
-
getSamples
public int[] getSamples(int x, int y, int w, int h, int b, int[] iArray, DataBuffer data)
返回int数组中指定的像素矩形的指定带中的样本,每个数据数组元素一个样本。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException。- 重写:
-
getSamples
在ComponentSampleModel
- 参数
-
x
- 左上角像素位置的X坐标 -
y
- 左上角像素位置的Y坐标 -
w
- 像素矩形的宽度 -
h
- 像素矩形的高度 -
b
- 乐队返回 -
iArray
- 如果非空,则返回此数组中的样本 -
data
- 包含图像数据的DataBuffer - 结果
- 在指定区域内的像素的样本。
- 另请参见:
-
setSamples(int, int, int, int, int, int[], DataBuffer)
-
setDataElements
public void setDataElements(int x, int y, Object obj, DataBuffer data)
从TransferType类型的原始数组中设置指定DataBuffer中单个像素的数据。 对于BandedSampleModel,它将与数据类型相同,并且每个数组元素都会传输一个样本。下面的代码说明从DataBuffer中为一个像素的数据
db1
,其存储布局通过的BandedSampleModel描述bsm1
到DataBufferdb2
,其存储布局通过的BandedSampleModel描述bsm2
。 传输通常比使用getPixel / setPixel更有效率。BandedSampleModel bsm1, bsm2; DataBufferInt db1, db2; bsm2.setDataElements(x, y, bsm1.getDataElements(x, y, null, db1), db2);
如果SampleModels具有相同数量的频带,则使用getDataElements / setDataElements在两个DataBuffer / SampleModel对之间传输是合法的,相应的频带具有与每个样本相同的位数,TransferTypes是相同的。obj必须是TransferType类型的原始数组。 否则,抛出ClassCastException。 如果坐标不在边界,或者如果obj不够大以容纳像素数据,则可能抛出ArrayIndexOutOfBoundsException。
- 重写:
-
setDataElements
在ComponentSampleModel
- 参数
-
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
在ComponentSampleModel
- 参数
-
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
在ComponentSampleModel
- 参数
-
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。- 重写:
-
setSample
在ComponentSampleModel
- 参数
-
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
在ComponentSampleModel
- 参数
-
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)
对于位于DataBuffer中(x,y)处的像素的指定带中的样本,使用双倍的输入。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException。- 重写:
-
setSample
在ComponentSampleModel
- 参数
-
x
- 像素位置的X坐标 -
y
- 像素位置的Y坐标 -
b
- 乐队设置 -
s
- 输入样本为双倍 -
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数组中为指定的像素矩形设置样本。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException。- 重写:
-
setSamples
在ComponentSampleModel
- 参数
-
x
- 左上角像素位置的X坐标 -
y
- 左上角像素位置的Y坐标 -
w
- 像素矩形的宽度 -
h
- 像素矩形的高度 -
b
- 乐队设置 -
iArray
- 输入样本数组 -
data
- 包含图像数据的DataBuffer - 另请参见:
-
getSamples(int, int, int, int, int, int[], DataBuffer)
-
hashCode
public int hashCode()
描述从类别复制:Object
返回对象的哈希码值。 支持这种方法是为了散列表的利益,如HashMap
所提供的那样 。hashCode
的总合同是:- 无论何时在执行Java应用程序时多次在同一对象上调用该对象,则
hashCode
方法必须始终返回相同的整数,前提是修改了对象中equals
比较中的信息。 该整数不需要从一个应用程序的执行到相同应用程序的另一个执行保持一致。 - 如果根据
equals(Object)
方法两个对象相等,则在两个对象中的每个对象上调用hashCode
方法必须产生相同的整数结果。 - 不要求如果两个对象根据
Object.equals(java.lang.Object)
方法不相等,则在两个对象中的每个对象上调用hashCode
方法必须产生不同的整数结果。 但是,程序员应该意识到,为不等对象生成不同的整数结果可能会提高哈希表的性能。
尽可能多的合理实用,由类
Object
定义的hashCode方法确实为不同对象返回不同的整数。 (在某个时间点,hashCode可能或可能不被实现为对象的存储器地址的某些功能。)- 重写:
-
hashCode
在ComponentSampleModel
- 结果
- 该对象的哈希码值。
- 另请参见:
-
Object.equals(java.lang.Object)
,System.identityHashCode(java.lang.Object)
- 无论何时在执行Java应用程序时多次在同一对象上调用该对象,则
-
-