java.lang.Object java.awt.image.SampleModel java.awt.image.ComponentSampleModel java.awt.image.BandedSampleModel
public final class BandedSampleModel
此类表示以 band 交错方式存储的图像数据,像素的每个样本都占用 DataBuffer 的一个数据元素。此类是 ComponentSampleModel 的子类,但是对于访问 band 交错图像数据来说,它提供的实现比 ComponentSampleModel 提供的实现更有效。当处理存储在不同 DataBuffer 存储单元中每个 band 样本数据的图像时,通常应该使用此类。由于提供了存取方法,因此可以直接对图像数据进行操作。像素间距是同一 扫描行上同一 band 的两个样本之间的数据数组元素数。BandedSampleModel 的像素间距为 1。扫描行间距是给定样本与下一扫描行的同一列中对应样本之间的数据数组元素数。band 偏移量表示从保存每个 band 的 DataBuffer 存储单元第一个数据数组元素到 band 第一个样本之间的数据数组元素数。这些 band 从 0 到 N-1 进行编号。存储单元索引表示数据缓冲区存储单元与图像数据 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。 |
方法摘要 | |
---|---|
SampleModel |
createCompatibleSampleModel(int w, int h) 创建一个具有指定宽度和高度的新的 BandedSampleModel。 |
DataBuffer |
createDataBuffer() 创建一个与此 BandedSampleModel 对应的 DataBuffer,该 DataBuffer 的数据类型、存储单元数和大小都将与此 BandedSampleModel 一致。 |
SampleModel |
createSubsetSampleModel(int[] bands) 创建一个具有此 BandedSampleModel 的 band 子集的新 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) 以 int 形式返回指定 band 中对应于 (x,y) 处像素的样本。 |
double |
getSampleDouble(int x, int y, int b, DataBuffer data) 以 double 形式返回指定 band 中对应于 (x,y) 处像素的样本。 |
float |
getSampleFloat(int x, int y, int b, DataBuffer data) 以 float 形式返回指定 band 中对应于 (x,y) 处像素的样本。 |
int[] |
getSamples(int x, int y, int w, int h, int b, int[] iArray, DataBuffer data) 在 int 数组中返回指定 band 中对应于指定像素矩形的样本,每个数据数组元素对应一个样本。 |
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 数组设置对应于像素矩形的所有样本,int 数组中每个数组元素包含一个样本。 |
void |
setSample(int x, int y, int b, double s, DataBuffer data) 使用输入的 double 值设置指定 band 中对应于 DataBuffer 中 (x,y) 处像素的样本。 |
void |
setSample(int x, int y, int b, float s, DataBuffer data) 使用输入的 float 值设置指定 band 中对应于 DataBuffer 中 (x,y) 处像素的样本。 |
void |
setSample(int x, int y, int b, int s, DataBuffer data) 使用输入的 int 值设置指定 band 中对应于 DataBuffer 中 (x,y) 处像素的样本。 |
void |
setSamples(int x, int y, int w, int h, int b, int[] iArray, DataBuffer data) 根据 int 数组设置指定 band 中对应于指定像素矩形的样本,int 数组中每个数据数组元素包含一个样本。 |
从类 java.awt.image.ComponentSampleModel 继承的方法 |
---|
equals, 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 |
从类 java.lang.Object 继承的方法 |
---|
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait |
构造方法详细信息 |
---|
public BandedSampleModel(int dataType, int w, int h, int numBands)
dataType
- 存储样本的数据类型。
w
- 所描述的图像数据区域的宽度(以像素为单位)。
h
- 所描述的图像数据区域的高度(以像素为单位)。
numBands
- 图像数据的 band 数。
IllegalArgumentException
- 如果
dataType
不是受支持的数据类型之一
public BandedSampleModel(int dataType, int w, int h, int scanlineStride, int[] bankIndices, int[] bandOffsets)
dataType
- 存储样本的数据类型。
w
- 所描述的图像数据区域的宽度(以像素为单位)。
h
- 所描述的图像数据区域的高度(以像素为单位)。
scanlineStride
- 图像数据的行间距。
bankIndices
- 每个 band 的存储单元索引。
bandOffsets
- 每个 band 的 band 偏移量。
IllegalArgumentException
- 如果
dataType
不是受支持的数据类型之一
方法详细信息 |
---|
public SampleModel createCompatibleSampleModel(int w, int h)
w
- 得到的
BandedSampleModel
的宽度
h
- 得到的
BandedSampleModel
的高度
BandedSampleModel
。
IllegalArgumentException
- 如果
w
或
h
等于
Integer.MAX_VALUE
或
Integer.MIN_VALUE
IllegalArgumentException
- 如果
dataType
不是受支持的数据类型之一
public SampleModel createSubsetSampleModel(int[] bands)
bands
- 此
ComponentSampleModel
的 band 子集
ComponentSampleModel
band 子集的
ComponentSampleModel
。
RasterFormatException
- 如果 band 数大于此样本模型中的存储单元数。
IllegalArgumentException
- 如果
dataType
不是受支持的数据类型之一
public DataBuffer createDataBuffer()
ComponentSampleModel
中的
createDataBuffer
ComponentSampleModel
一致的
DataBuffer
。
IllegalArgumentException
- 如果
dataType
不是受支持的类型之一。
public Object getDataElements(int x, int y, Object obj, DataBuffer data)
以下代码说明了如何将一个像素的数据从 DataBuffer db1
(其存储布局由 BandedSampleModel bsm1
描述)传输到 DataBuffer db2
(其存储布局由 BandedSampleModel bsm2
描述)。通常,该传输比使用 getPixel/setPixel 方法更高效。
BandedSampleModel bsm1, bsm2; DataBufferInt db1, db2; bsm2.setDataElements(x, y, bsm1.getDataElements(x, y, null, db1), db2);如果两个 SampleModel 具有相同的 band 数,相应 band 的每个样本具有相同的位数,且 TransferType 相同,则使用 getDataElements/setDataElements 在这两个 DataBuffer/SampleModel 对之间传输数据是合法的。
如果 obj 不为 null,则它应该是一个 TransferType 类型基本数组。否则抛出 ClassCastException。如果坐标不在边界内部,或者 obj 不为 null 且大小不足以容纳像素数据,则抛出 ArrayIndexOutOfBoundsException。
ComponentSampleModel
中的
getDataElements
x
- 像素位置的 X 坐标
y
- 像素位置的 Y 坐标
obj
- 如果不为 null,则为一个接收返回像素数据的基本数组。
data
- 包含图像数据的 DataBuffer。
setDataElements(int, int, Object, DataBuffer)
public int[] getPixel(int x, int y, int[] iArray, DataBuffer data)
ComponentSampleModel
中的
getPixel
x
- 像素位置的 X 坐标
y
- 像素位置的 Y 坐标
iArray
- 如果不为 null,则在此数组中返回样本
data
- 包含图像数据的 DataBuffer
setPixel(int, int, int[], DataBuffer)
public int[] getPixels(int x, int y, int w, int h, int[] iArray, DataBuffer data)
ComponentSampleModel
中的
getPixels
x
- 左上角像素位置的 X 坐标
y
- 左上角像素位置的 Y 坐标
w
- 像素矩形的宽度
h
- 像素矩形的高度
iArray
- 如果不为 null,则在此数组中返回样本
data
- 包含图像数据的 DataBuffer
setPixels(int, int, int, int, int[], DataBuffer)
public int getSample(int x, int y, int b, DataBuffer data)
ComponentSampleModel
中的
getSample
x
- 像素位置的 X 坐标
y
- 像素位置的 Y 坐标
b
- 要返回的 band
data
- 包含图像数据的 DataBuffer
setSample(int, int, int, int, DataBuffer)
public float getSampleFloat(int x, int y, int b, DataBuffer data)
ComponentSampleModel
中的
getSampleFloat
x
- 像素位置的 X 坐标
y
- 像素位置的 Y 坐标
b
- 要返回的 band
data
- 包含图像数据的 DataBuffer
public double getSampleDouble(int x, int y, int b, DataBuffer data)
ComponentSampleModel
中的
getSampleDouble
x
- 像素位置的 X 坐标
y
- 像素位置的 Y 坐标
b
- 要返回的 band
data
- 包含图像数据的 DataBuffer
public int[] getSamples(int x, int y, int w, int h, int b, int[] iArray, DataBuffer data)
ComponentSampleModel
中的
getSamples
x
- 左上角像素位置的 X 坐标
y
- 左上角像素位置的 Y 坐标
w
- 像素矩形的宽度
h
- 像素矩形的高度
b
- 要返回的 band
iArray
- 如果不为 null,则返回此数组中的样本
data
- 包含图像数据的 DataBuffer
setSamples(int, int, int, int, int, int[], DataBuffer)
public void setDataElements(int x, int y, Object obj, DataBuffer data)
以下代码说明了如何将一个像素的数据从 DataBuffer db1
(其存储布局由 BandedSampleModel bsm1
描述)传输到 DataBuffer db2
(其存储布局由 BandedSampleModel bsm2
描述)。通常,该传输比使用 getPixel/setPixel 更高效。
BandedSampleModel bsm1, bsm2; DataBufferInt db1, db2; bsm2.setDataElements(x, y, bsm1.getDataElements(x, y, null, db1), db2);如果两个 SampleModels 具有相同的 band 数,相应 band 的每个样本具有相同的位数,且 TransferTypes 相同,则使用 getDataElements/setDataElements 在这两个 DataBuffer/SampleModel 对之间传输数据是合法的。
obj 必须是一个 TransferType 类型基本数组。否则抛出 ClassCastException。如果坐标不在边界内部,或者 obj 的大小不足以容纳像素数据,则抛出 ArrayIndexOutOfBoundsException。
ComponentSampleModel
中的
setDataElements
x
- 像素位置的 X 坐标
y
- 像素位置的 Y 坐标
obj
- 如果不为 null,则返回此对象中的基本数组
data
- 包含图像数据的 DataBuffer
getDataElements(int, int, Object, DataBuffer)
public void setPixel(int x, int y, int[] iArray, DataBuffer data)
ComponentSampleModel
中的
setPixel
x
- 像素位置的 X 坐标
y
- 像素位置的 Y 坐标
iArray
- int 数组中的输入样本
data
- 包含图像数据的 DataBuffer
getPixel(int, int, int[], DataBuffer)
public void setPixels(int x, int y, int w, int h, int[] iArray, DataBuffer data)
ComponentSampleModel
中的
setPixels
x
- 像素位置左上角的 X 坐标
y
- 像素位置左上角的 Y 坐标
w
- 像素矩形的宽度
h
- 像素矩形的高度
iArray
- int 数组中的输入样本
data
- 包含图像数据的 DataBuffer
getPixels(int, int, int, int, int[], DataBuffer)
public void setSample(int x, int y, int b, int s, DataBuffer data)
ComponentSampleModel
中的
setSample
x
- 像素位置的 X 坐标
y
- 像素位置的 Y 坐标
b
- 要设置的 band
s
- 输入的样本(int 形式)
data
- 包含图像数据的 DataBuffer
getSample(int, int, int, DataBuffer)
public void setSample(int x, int y, int b, float s, DataBuffer data)
ComponentSampleModel
中的
setSample
x
- 像素位置的 X 坐标
y
- 像素位置的 Y 坐标
b
- 要设置的 band
s
- 输入的样本(float 形式)
data
- 包含图像数据的 DataBuffer
getSample(int, int, int, DataBuffer)
public void setSample(int x, int y, int b, double s, DataBuffer data)
ComponentSampleModel
中的
setSample
x
- 像素位置的 X 坐标
y
- 像素位置的 Y 坐标
b
- 要设置的 band
s
- 输入的样本(为一个 double 值)
data
- 包含图像数据的 DataBuffer
getSample(int, int, int, DataBuffer)
public void setSamples(int x, int y, int w, int h, int b, int[] iArray, DataBuffer data)
ComponentSampleModel
中的
setSamples
x
- 像素位置左上角的 X 坐标
y
- 像素位置左上角的 Y 坐标
w
- 像素矩形的宽度
h
- 像素矩形的高度
b
- 要设置的 band
iArray
- 输入的样本数组
data
- 包含图像数据的 DataBuffer
getSamples(int, int, int, int, int, int[], DataBuffer)
public int hashCode()
Object
复制的描述
java.util.Hashtable
提供的哈希表)的性能。
hashCode
的常规协定是:
hashCode
方法都必须生成相同的整数结果。 Object.equals(java.lang.Object)
方法,两个对象不相等,那么对这两个对象中的任一对象上调用 hashCode 方法不 要求一定生成不同的整数结果。但是,程序员应该意识到,为不相等的对象生成不同整数结果可以提高哈希表的性能。 实际上,由 Object 类定义的 hashCode 方法确实会针对不同的对象返回不同的整数。(这一般是通过将该对象的内部地址转换成一个整数来实现的,但是 JavaTM 编程语言不需要这种实现技巧。)
ComponentSampleModel
中的
hashCode
Object.equals(java.lang.Object)
,
Hashtable