java.lang.Object java.awt.image.SampleModel java.awt.image.SinglePixelPackedSampleModel
public class SinglePixelPackedSampleModel
此类表示压缩的像素数据:将 N 个样本组成的单个像素存储在单个数据数组元素中,每个数据数组元素只保存一个像素的样本。此类支持 TYPE_BYTE
、TYPE_USHORT
和 TYPE_INT
数据类型。所有数据数组元素都位于 DataBuffer 的第一个存储单元中。该类提供了一些存取方法,以便直接操作图像数据。扫描行间距是给定样本和下一个扫描行同一列中对应样本之间的数据数组元素数。位掩码是提取表示像素 band 样本所需的掩码。位偏移量是样本数据数组元素中位的偏移量,其中样本表示像素的 band。
以下代码说明了如何从 DataBuffer data
中提取表示像素 x,y
处 band b
的样本位:
int sample = data.getElem(y * scanlineStride + x); sample = (sample & bitMasks[b]) >>> bitOffsets[b];
字段摘要 |
---|
从类 java.awt.image.SampleModel 继承的字段 |
---|
dataType, height, numBands, width |
构造方法摘要 | |
---|---|
SinglePixelPackedSampleModel(int dataType, int w, int h, int[] bitMasks) 构造一个具有 bitMasks.length band 的 SinglePixelPackedSampleModel。 |
|
SinglePixelPackedSampleModel(int dataType, int w, int h, int scanlineStride, int[] bitMasks) 构造一个 SinglePixelPackedSampleModel,使其具有 bitMasks.length band,且扫描行间距等于 scanlineStride 数据数组元素。 |
方法摘要 | |
---|---|
SampleModel |
createCompatibleSampleModel(int w, int h) 创建一个具有指定宽度和高度的新 SinglePixelPackedSampleModel。 |
DataBuffer |
createDataBuffer() 创建一个对应于此 SinglePixelPackedSampleModel 的 DataBuffer。 |
SampleModel |
createSubsetSampleModel(int[] bands) 创建一个新 SinglePixelPackedSampleModel,使其具有此 SinglePixelPackedSampleModel 的 band 子集。 |
boolean |
equals(Object o) 指示其他某个对象是否与此对象“相等”。 |
int[] |
getBitMasks() 返回所有 band 的位掩码。 |
int[] |
getBitOffsets() 返回表示所有 band 像素的数据数组元素中的位偏移量。 |
Object |
getDataElements(int x, int y, Object obj, DataBuffer data) 返回 TransferType 类型基本数组中单个像素的数据。 |
int |
getNumDataElements() 返回通过 getDataElements 和 setDataElements 方法传输一个像素所需的数据元素数。 |
int |
getOffset(int x, int y) 返回像素 (x,y)(在数据数组元素中)的偏移量。 |
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) 处像素的样本。 |
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() 返回此 SinglePixelPackedSampleModel 的扫描行间距。 |
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, 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 中对应于指定像素矩形的样本,该数组为每个数组元素包含一个样本。 |
从类 java.awt.image.SampleModel 继承的方法 |
---|
getDataElements, getDataType, getHeight, getNumBands, getPixel, getPixel, getPixels, getPixels, getSampleDouble, getSampleFloat, getSamples, getSamples, getTransferType, getWidth, setDataElements, setPixel, setPixel, setPixels, setPixels, setSample, setSample, setSamples, setSamples |
从类 java.lang.Object 继承的方法 |
---|
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait |
构造方法详细信息 |
---|
public SinglePixelPackedSampleModel(int dataType, int w, int h, int[] bitMasks)
dataType
- 存储样本使用的数据类型。
w
- 所描述的图像数据区域的宽度(以像素为单位)。
h
- 所描述的图像数据区域的高度(以像素为单位)。
bitMasks
- 所有 band 的位掩码。
IllegalArgumentException
- 如果
dataType
不是
DataBuffer.TYPE_BYTE
、
DataBuffer.TYPE_USHORT
或
DataBuffer.TYPE_INT
public SinglePixelPackedSampleModel(int dataType, int w, int h, int scanlineStride, int[] bitMasks)
dataType
- 存储样本使用的数据类型。
w
- 所描述的图像数据区域的宽度(以像素为单位)。
h
- 所描述的图像数据区域的高度(以像素为单位)。
scanlineStride
- 图像数据的行间距。
bitMasks
- 所有 band 的位掩码。
IllegalArgumentException
- 如果
w
或
h
不大于 0
IllegalArgumentException
- 如果
bitMask
中的任何掩码不连续
IllegalArgumentException
- 如果
dataType
不是
DataBuffer.TYPE_BYTE
、
DataBuffer.TYPE_USHORT
或
DataBuffer.TYPE_INT
方法详细信息 |
---|
public int getNumDataElements()
SampleModel
中的
getNumDataElements
SampleModel.getDataElements(int, int, Object, DataBuffer)
,
SampleModel.getDataElements(int, int, int, int, Object, DataBuffer)
,
SampleModel.setDataElements(int, int, Object, DataBuffer)
,
SampleModel.setDataElements(int, int, int, int, Object, DataBuffer)
,
SampleModel.getTransferType()
public SampleModel createCompatibleSampleModel(int w, int h)
SampleModel
中的
createCompatibleSampleModel
w
- 得到的
SampleModel
的宽度
h
- 得到的
SampleModel
的高度
SinglePixelPackedSampleModel
。
IllegalArgumentException
- 如果
w
或
h
不大于 0
public DataBuffer createDataBuffer()
SampleModel
中的
createDataBuffer
SampleModel
的
DataBuffer
。
public int[] getSampleSize()
SampleModel
中的
getSampleSize
public int getSampleSize(int band)
SampleModel
中的
getSampleSize
band
- 指定的 band
public int getOffset(int x, int y)
x,y
的数据元素可以使用 SinglePixelPackedSampleModel
sppsm
从 DataBuffer
data
中检索:
data.getElem(sppsm.getOffset(x, y));
x
- 指定像素的 X 坐标
y
- 指定像素的 Y 坐标
public int[] getBitOffsets()
public int[] getBitMasks()
public int getScanlineStride()
SinglePixelPackedSampleModel
的扫描行间距。
public SampleModel createSubsetSampleModel(int[] bands)
SampleModel
中的
createSubsetSampleModel
bands
- 此
SampleModel
的 band 子集
SampleModel
band 子集的
SampleModel
。
RasterFormatException
- 如果 band 参数的长度大于样本模型中 band 的数量。
public Object getDataElements(int x, int y, Object obj, DataBuffer data)
以下代码说明了如何将一个像素的数据从 DataBuffer db1
(其存储布局由 SinglePixelPackedSampleModel sppsm1
描述)传输到 DataBuffer db2
(其存储布局由 SinglePixelPackedSampleModel sppsm2
描述)。该传输通常比使用 getPixel/setPixel 更有效。
SinglePixelPackedSampleModel sppsm1, sppsm2; DataBufferInt db1, db2; sppsm2.setDataElements(x, y, sppsm1.getDataElements(x, y, null, db1), db2);如果两个 SampleModel 具有相同的 band 数量,相应 band 的每个样本具有相同的位数,且 TransferType 相同,则使用 getDataElements/setDataElements 在两个 DataBuffer/SampleModel 对之间进行传输是合法的。
如果 obj 不为 null,则它应是 TransferType 类型的基本数组。否则抛出 ClassCastException。如果坐标不在范围内,或者 obj 不为 null 且大小不足以保存像素数据,则抛出 ArrayIndexOutOfBoundsException。
SampleModel
中的
getDataElements
x
- 像素位置的 X 坐标。
y
- 像素位置的 Y 坐标。
obj
- 如果不为 null,则 obj 是接收返回像素数据的基本数组。
data
- 包含图像数据的 DataBuffer。
setDataElements(int, int, Object, DataBuffer)
public int[] getPixel(int x, int y, int[] iArray, DataBuffer data)
SampleModel
中的
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)
SampleModel
中的
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)
SampleModel
中的
getSample
x
- 像素位置的 X 坐标。
y
- 像素位置的 Y 坐标。
b
- 要返回的 band。
data
- 包含图像数据的 DataBuffer。
setSample(int, int, int, int, DataBuffer)
public int[] getSamples(int x, int y, int w, int h, int b, int[] iArray, DataBuffer data)
SampleModel
中的
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
(其存储布局由 SinglePixelPackedSampleModel sppsm1
描述)传输到 DataBuffer db2
(其存储布局由 SinglePixelPackedSampleModel sppsm2
描述)。该传输通常比使用 getPixel/setPixel 更有效。
SinglePixelPackedSampleModel sppsm1, sppsm2; DataBufferInt db1, db2; sppsm2.setDataElements(x, y, sppsm1.getDataElements(x, y, null, db1), db2);如果两个 SampleModel 具有相同的 band 数量,相应 band 的每个样本具有相同的位数,且 TransferType 相同,则使用 getDataElements/setDataElements 在两个 DataBuffer/SampleModel 对之间进行传输是合法的。
obj 必须是 TransferType 类型的基本数组。否则抛出 ClassCastException。如果坐标不在范围内,或者 obj 的大小不足以容纳像素数据,则抛出 ArrayIndexOutOfBoundsException。
SampleModel
中的
setDataElements
x
- 像素位置的 X 坐标。
y
- 像素位置的 Y 坐标。
obj
- 包含像素数据的基本数组。
data
- 包含图像数据的 DataBuffer。
getDataElements(int, int, Object, DataBuffer)
public void setPixel(int x, int y, int[] iArray, DataBuffer data)
SampleModel
中的
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)
SampleModel
中的
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)
SampleModel
中的
setSample
x
- 像素位置的 X 坐标。
y
- 像素位置的 Y 坐标。
b
- 要设置的 band。
s
- int 形式的输入样本。
data
- 包含图像数据的 DataBuffer。
getSample(int, int, int, DataBuffer)
public void setSamples(int x, int y, int w, int h, int b, int[] iArray, DataBuffer data)
SampleModel
中的
setSamples
x
- 左上角像素位置的 X 坐标。
y
- 左上角像素位置的 Y 坐标。
w
- 像素矩形的宽度。
h
- 像素矩形的高度。
b
- 要设置的 band。
iArray
- int 数组中的输入样本。
data
- 包含图像数据的 DataBuffer。
getSamples(int, int, int, int, int, int[], DataBuffer)
public boolean equals(Object o)
Object
复制的描述
equals
方法在非空对象引用上实现相等关系:
x
,x.equals(x)
都应返回 true
。 x
和 y
,当且仅当 y.equals(x)
返回 true
时,x.equals(y)
才应返回 true
。 x
、y
和 z
,如果 x.equals(y)
返回 true
,并且 y.equals(z)
返回 true
,那么 x.equals(z)
应返回 true
。 x
和 y
,多次调用 x.equals(y) 始终返回 true
或始终返回 false
,前提是对象上 equals
比较中所用的信息没有被修改。 x
,x.equals(null)
都应返回 false
。 Object
类的 equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值 x
和 y
,当且仅当 x
和 y
引用同一个对象时,此方法才返回 true
(x == y
具有值 true
)。
注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。
o
- 要与之比较的引用对象。
true
;否则返回
false
。
Object.hashCode()
,
Hashtable
public int hashCode()
Object
复制的描述
java.util.Hashtable
提供的哈希表)的性能。
hashCode
的常规协定是:
hashCode
方法都必须生成相同的整数结果。 Object.equals(java.lang.Object)
方法,两个对象不相等,那么对这两个对象中的任一对象上调用 hashCode 方法不 要求一定生成不同的整数结果。但是,程序员应该意识到,为不相等的对象生成不同整数结果可以提高哈希表的性能。 实际上,由 Object 类定义的 hashCode 方法确实会针对不同的对象返回不同的整数。(这一般是通过将该对象的内部地址转换成一个整数来实现的,但是 JavaTM 编程语言不需要这种实现技巧。)
Object.equals(java.lang.Object)
,
Hashtable