|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
上一个类 下一个类 | 框架 无框架 | |||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
java.lang.Object java.awt.image.SampleModel java.awt.image.MultiPixelPackedSampleModel
public class MultiPixelPackedSampleModel
MultiPixelPackedSampleModel
类表示一个 band 的图像,并且能够将多个单采样像素打包到一个数据元素中。不允许像素跨越数据元素。数据类型可以是 DataBuffer.TYPE_BYTE、DataBuffer.TYPE_USHORT 或 DataBuffer.TYPE_INT。每个像素的位数必须是 2 的某次幂,并且一个数据元素中放入的像素数必须正好也是 2 的某次幂。像素位的跨度等于每个像素的位数。扫描行的跨度在数据元素中,最后几个数据元素可以由未使用的像素填充。数据位的偏移量是从 DataBuffer
的开始到首个像素的位偏移量,并且必须是像素位跨度的倍数。
下面的代码说明了如何从 DataBuffer
data
中提取像素 x, y
的各位并将像素数据存储到 dataType
类型的数据元素中:
int dataElementSize = DataBuffer.getDataTypeSize(dataType); int bitnum = dataBitOffset + x*pixelBitStride; int element = data.getElem(y*scanlineStride + bitnum/dataElementSize); int shift = dataElementSize - (bitnum & (dataElementSize-1)) - pixelBitStride; int pixel = (element >> shift) & ((1 << pixelBitStride) - 1);
字段摘要 |
---|
从类 java.awt.image.SampleModel 继承的字段 |
---|
dataType, height, numBands, width |
构造方法摘要 | |
---|---|
MultiPixelPackedSampleModel(int dataType,
int w,
int h,
int numberOfBits)
构造一个具有指定数据类型、宽度、高度和每个像素位数的 MultiPixelPackedSampleModel 。 |
|
MultiPixelPackedSampleModel(int dataType,
int w,
int h,
int numberOfBits,
int scanlineStride,
int dataBitOffset)
构造一个具有指定数据类型、宽度、高度、每个像素的位数、扫描行跨度和数据位偏移量的 MultiPixelPackedSampleModel 。 |
方法摘要 | |
---|---|
SampleModel |
createCompatibleSampleModel(int w,
int h)
构造一个具有指定宽度和高度的新 MultiPixelPackedSampleModel 。 |
DataBuffer |
createDataBuffer()
创建一个与此 MultiPixelPackedSampleModel 对应的 DataBuffer 。 |
SampleModel |
createSubsetSampleModel(int[] bands)
创建一个具有此 MultiPixelPackedSampleModel 的 band 子集的新 MultiPixelPackedSampleModel 。 |
boolean |
equals(Object o)
指示某个其他对象是否与此对象“相等”。 |
int |
getBitOffset(int x)
返回数据元素中存储扫描行第 x 个像素的偏移量(以位为单位)。 |
int |
getDataBitOffset()
返回数据位的偏移量(以位为单位)。 |
Object |
getDataElements(int x,
int y,
Object obj,
DataBuffer data)
以 TransferType 类型的基本数组形式返回单个像素的数据。 |
int |
getNumDataElements()
返回通过 getDataElements(int, int, java.lang.Object, java.awt.image.DataBuffer) 和 setDataElements(int, int, java.lang.Object, java.awt.image.DataBuffer) 方法传输一个像素所需的数据元素数。 |
int |
getOffset(int x,
int y)
返回数据数组元素中像素 (x, y) 的偏移量。 |
int[] |
getPixel(int x,
int y,
int[] iArray,
DataBuffer data)
返回 int 数组首个元素中的指定单个 band 像素。 |
int |
getPixelBitStride()
返回像素位跨度,以位为单位。 |
int |
getSample(int x,
int y,
int b,
DataBuffer data)
返回以 int 表示的、像素 (x, y) 指定 band 中的采样。 |
int[] |
getSampleSize()
返回所有 band 每个采样的位数。 |
int |
getSampleSize(int band)
返回指定 band 每个采样的位数。 |
int |
getScanlineStride()
返回扫描行的跨度。 |
int |
getTransferType()
返回通过 getDataElements 和 setDataElements 方法传输像素所使用的 TransferType。 |
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 |
setSample(int x,
int y,
int b,
int s,
DataBuffer data)
使用输入的 int ,设置 DataBuffer 中位于 (x,y) 的像素的指定 band 中的采样。 |
从类 java.awt.image.SampleModel 继承的方法 |
---|
getDataElements, getDataType, getHeight, getNumBands, getPixel, getPixel, getPixels, getPixels, getPixels, getSampleDouble, getSampleFloat, getSamples, getSamples, getSamples, getWidth, setDataElements, setPixel, setPixel, setPixels, setPixels, setPixels, setSample, setSample, setSamples, setSamples, setSamples |
从类 java.lang.Object 继承的方法 |
---|
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait |
构造方法详细信息 |
---|
public MultiPixelPackedSampleModel(int dataType, int w, int h, int numberOfBits)
MultiPixelPackedSampleModel
。
dataType
- 存储采样的数据类型w
- 所描述的图像数据区域的宽度,以像素为单位h
- 所描述的图像数据区域的高度,以像素为单位numberOfBits
- 每个像素的位数
IllegalArgumentException
- 如果 dataType
不是 DataBuffer.TYPE_BYTE
、DataBuffer.TYPE_USHORT
或 DataBuffer.TYPE_INT
之一public MultiPixelPackedSampleModel(int dataType, int w, int h, int numberOfBits, int scanlineStride, int dataBitOffset)
MultiPixelPackedSampleModel
。
dataType
- 存储采用的数据类型w
- 所描述的图像数据区域的宽度,以像素为单位h
- 所描述的图像数据区域的高度,以像素为单位numberOfBits
- 每个像素的位数scanlineStride
- 图像数据的行跨度dataBitOffset
- 所描述的图像数据区域的数据位偏移量
RasterFormatException
- 如果每个像素的位数不是 2 的某次幂,或者一个数据元素中放入的像素数不是 2 的某次幂。
IllegalArgumentException
- 如果 w
或 h
不大于 0
IllegalArgumentException
- 如果 dataType
不是 DataBuffer.TYPE_BYTE
、DataBuffer.TYPE_USHORT
或 DataBuffer.TYPE_INT
之一方法详细信息 |
---|
public SampleModel createCompatibleSampleModel(int w, int h)
MultiPixelPackedSampleModel
。这个新的 MultiPixelPackedSampleModel
具有和此 MultiPixelPackedSampleModel
相同的存储数据类型和每像素位数。
SampleModel
中的 createCompatibleSampleModel
w
- 指定的宽度h
- 指定的高度
MultiPixelPackedSampleModel
相同的存储数据类型和每像素位数的 SampleModel
。
IllegalArgumentException
- 如果 w
或 h
不大于 0public DataBuffer createDataBuffer()
MultiPixelPackedSampleModel
对应的 DataBuffer
。该 DataBuffer
对象的数据类型和大小与此 MultiPixelPackedSampleModel
一致。DataBuffer
具有单个存储单元。
SampleModel
中的 createDataBuffer
MultiPixelPackedSampleModel
相同的数据类型和大小的 DataBuffer
。public int getNumDataElements()
getDataElements(int, int, java.lang.Object, java.awt.image.DataBuffer)
和 setDataElements(int, int, java.lang.Object, java.awt.image.DataBuffer)
方法传输一个像素所需的数据元素数。对于 MultiPixelPackedSampleModel
,该值是一。
SampleModel
中的 getNumDataElements
public int[] getSampleSize()
SampleModel
中的 getSampleSize
public int getSampleSize(int band)
SampleModel
中的 getSampleSize
band
- 指定的 band
public int getOffset(int x, int y)
x, y
- 指定的像素
public int getBitOffset(int x)
x
个像素的偏移量(以位为单位)。此偏移量对于所有扫描行相同。
x
- 指定的像素
public int getScanlineStride()
MultiPixelPackedSampleModel
的扫描行跨度。public int getPixelBitStride()
MultiPixelPackedSampleModel
的 pixelBitStride
。public int getDataBitOffset()
MultiPixelPackedSampleModel
的 dataBitOffset
。public int getTransferType()
getDataElements
和 setDataElements
方法传输像素所使用的 TransferType。该 TransferType 可能与存储 DataType 相同,也可能不同。TransferType 是 DataBuffer.TYPE_BYTE、DataBuffer.TYPE_USHORT 或 DataBuffer.TYPE_INT 之一。
SampleModel
中的 getTransferType
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.getNumDataElements()
,
DataBuffer
public SampleModel createSubsetSampleModel(int[] bands)
MultiPixelPackedSampleModel
的 band 子集的新 MultiPixelPackedSampleModel
。因为 MultiPixelPackedSampleModel
只有一个 band,所以 bands 参数的长度必须为一并指示第零个 band。
SampleModel
中的 createSubsetSampleModel
bands
- 指定的 band
MultiPixelPackedSampleModel
带子集的新 SampleModel
。
RasterFormatException
- 如果请求的 band 数不是一。
IllegalArgumentException
- 如果 w
或 h
不大于 0public int getSample(int x, int y, int b, DataBuffer data)
int
表示的、像素 (x, y) 指定 band 中的采样。如果坐标超出了范围,则抛出 ArrayIndexOutOfBoundsException
。
SampleModel
中的 getSample
x, y
- 指定像素的坐标b
- 返回的 band,假定为 0data
- 包含图像数据的 DataBuffer
ArrayIndexOutOfBoundException
- 如果指定的坐标超出了范围。setSample(int, int, int, int, DataBuffer)
public void setSample(int x, int y, int b, int s, DataBuffer data)
int
,设置 DataBuffer
中位于 (x,y) 的像素的指定 band 中的采样。如果坐标超出了范围,则抛出 ArrayIndexOutOfBoundsException
。
SampleModel
中的 setSample
x, y
- 指定像素的坐标b
- 返回的 band,假定为 0s
- int
形式的输入采样data
- 存储图像数据的 DataBuffer
ArrayIndexOutOfBoundsException
- 如果坐标超出了范围。getSample(int, int, int, DataBuffer)
public Object getDataElements(int x, int y, Object obj, DataBuffer data)
MultiPixelPackedSampleModel
,该数组有一个元素,类型是可保存单个像素的 DataBuffer.TYPE_BYTE、DataBuffer.TYPE_USHORT 或 DataBuffer.TYPE_INT 中的最小值。通常,传入的 obj
应该为 null
,这样可自动创建 Object
并具有正确的基本数据类型。
下面的代码说明了将一个像素的数据从 DataBuffer
db1
(其存储布局由 MultiPixelPackedSampleModel
mppsm1
描述)传输到 DataBuffer
db2
(其存储布局由 MultiPixelPackedSampleModel
mppsm2
描述)。该传输通常比使用 getPixel
或 setPixel
更为高效。
MultiPixelPackedSampleModel mppsm1, mppsm2; DataBufferInt db1, db2; mppsm2.setDataElements(x, y, mppsm1.getDataElements(x, y, null, db1), db2);如果各个
SampleModel
具有相同的 band 数,相应的 band 具有相同的每采样位数,并且 TransferType 也相同,则使用 getDataElements
或 setDataElements
在两个 DataBuffer/SampleModel
对之间进行传输是合法的。
如果 obj
为非 null
,则它应是一个 TransferType 类型的基本数组。否则会抛出 ClassCastException
。如果坐标超出了范围,或者 obj
为非 null
并且其不足以保存该像素数据,则抛出 ArrayIndexOutOfBoundsException
。
SampleModel
中的 getDataElements
x, y
- 像素位置的坐标。obj
- 在其中返回像素数据的基本数组,或者为 null
。data
- 包含图像数据的 DataBuffer
。
Object
。
ClassCastException
- 如果 obj
不是 TransferType 类型的基本数组或者非 null
ArrayIndexOutOfBoundsException
- 如果坐标超出了范围,或者 obj
为非 null
或其不足以保存该像素数据setDataElements(int, int, Object, DataBuffer)
public int[] getPixel(int x, int y, int[] iArray, DataBuffer data)
int
数组首个元素中的指定单个 band 像素。如果坐标超出了范围,则抛出 ArrayIndexOutOfBoundsException
。
SampleModel
中的 getPixel
x, y
- 像素位置的坐标iArray
- 包含要返回像素的数组,或者为 null
data
- 存储图像数据的 DataBuffer
ArrayIndexOutOfBoundsException
- 如果坐标超出了范围范围setPixel(int, int, int[], DataBuffer)
public void setDataElements(int x, int y, Object obj, DataBuffer data)
DataBuffer
中单个像素的数据。对于 MultiPixelPackedSampleModel
,仅数组的首个元素才保存有效数据,并且类型必须是可以保存单个像素的 DataBuffer.TYPE_BYTE、DataBuffer.TYPE_USHORT 或 DataBuffer.TYPE_INT 的最小值。
下面的代码说明了将一个像素的数据从 DataBuffer
db1
(其存储布局由 MultiPixelPackedSampleModel
mppsm1
所描述)传输到 DataBuffer
db2
(其存储布局由 MultiPixelPackedSampleModel
mppsm2
所描述)。该传输通常比使用 getPixel
或 setPixel
更为高效。
MultiPixelPackedSampleModel mppsm1, mppsm2; DataBufferInt db1, db2; mppsm2.setDataElements(x, y, mppsm1.getDataElements(x, y, null, db1), db2);如果各个
SampleModel
对象具有相同的 band 数,相应的 band 具有相同的每采样位数,并且 TransferType 也相同,则使用 getDataElements
或 setDataElements
在两个 DataBuffer/SampleModel
对之间进行传输是合法的。
obj
必须是 TransferType 类型的基本数组。否则会抛出 ClassCastException
。如果坐标超出了范围,或者 obj
不足以保存该像素数据,则抛出 ArrayIndexOutOfBoundsException
。
SampleModel
中的 setDataElements
x, y
- 像素位置的坐标obj
- 包含像素数据的基本数组data
- 包含图像数据的 DataBuffer
getDataElements(int, int, Object, DataBuffer)
public void setPixel(int x, int y, int[] iArray, DataBuffer data)
int
数组设置 DataBuffer
中的某个像素。如果坐标超出了范围,则抛出 ArrayIndexOutOfBoundsException
。
SampleModel
中的 setPixel
x, y
- 像素位置的坐标iArray
- int
数组形式的输入像素data
- 包含图像数据的 DataBuffer
getPixel(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
|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
上一个类 下一个类 | 框架 无框架 | |||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
版权所有 2004 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策。