|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
| 上一个类 下一个类 | 框架 无框架 | |||||||||
| 摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 | |||||||||
java.lang.Objectjava.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 中的 createCompatibleSampleModelw - 指定的宽度h - 指定的高度
MultiPixelPackedSampleModel 相同的存储数据类型和每像素位数的 SampleModel。
IllegalArgumentException - 如果 w 或 h 不大于 0public DataBuffer createDataBuffer()
MultiPixelPackedSampleModel 对应的 DataBuffer。该 DataBuffer 对象的数据类型和大小与此 MultiPixelPackedSampleModel 一致。DataBuffer 具有单个存储单元。
SampleModel 中的 createDataBufferMultiPixelPackedSampleModel 相同的数据类型和大小的 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 中的 getNumDataElementsSampleModel.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 int[] getSampleSize()
SampleModel 中的 getSampleSizepublic int getSampleSize(int band)
SampleModel 中的 getSampleSizeband - 指定的 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 中的 getTransferTypeSampleModel.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(),
DataBufferpublic SampleModel createSubsetSampleModel(int[] bands)
MultiPixelPackedSampleModel 的 band 子集的新 MultiPixelPackedSampleModel。因为 MultiPixelPackedSampleModel 只有一个 band,所以 bands 参数的长度必须为一并指示第零个 band。
SampleModel 中的 createSubsetSampleModelbands - 指定的 band
MultiPixelPackedSampleModel 带子集的新 SampleModel。
RasterFormatException - 如果请求的 band 数不是一。
IllegalArgumentException - 如果 w 或 h 不大于 0
public int getSample(int x,
int y,
int b,
DataBuffer data)
int 表示的、像素 (x, y) 指定 band 中的采样。如果坐标超出了范围,则抛出 ArrayIndexOutOfBoundsException。
SampleModel 中的 getSamplex, 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 中的 setSamplex, 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 中的 getDataElementsx, 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 中的 getPixelx, y - 像素位置的坐标iArray - 包含要返回像素的数组,或者为 nulldata - 存储图像数据的 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 中的 setDataElementsx, y - 像素位置的坐标obj - 包含像素数据的基本数组data - 包含图像数据的 DataBuffergetDataElements(int, int, Object, DataBuffer)
public void setPixel(int x,
int y,
int[] iArray,
DataBuffer data)
int 数组设置 DataBuffer 中的某个像素。如果坐标超出了范围,则抛出 ArrayIndexOutOfBoundsException。
SampleModel 中的 setPixelx, y - 像素位置的坐标iArray - int 数组形式的输入像素data - 包含图像数据的 DataBuffergetPixel(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 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。
Object 中的 equalso - 要与之比较的引用对象。
true;否则返回 false。Object.hashCode(),
Hashtablepublic int hashCode()
Object 复制的描述java.util.Hashtable 提供的哈希表。
hashCode 的常规协定是:
hashCode 方法都必须生成相同的整数结果。
Object.equals(java.lang.Object) 方法,两个对象不相等,那么在两个对象中的任一对象上调用 hashCode 方法必定会生成不同的整数结果。但是,程序员应该知道,为不相等的对象生成不同整数结果可以提高哈希表的性能。
实际上,由 Object 类定义的 hashCode 方法确实会针对不同的对象返回不同的整数。(这一般是通过将该对象的内部地址转换成一个整数来实现的,但是 JavaTM 编程语言不需要这种实现技巧。)
Object 中的 hashCodeObject.equals(java.lang.Object),
Hashtable
|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
| 上一个类 下一个类 | 框架 无框架 | |||||||||
| 摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 | |||||||||
版权所有 2004 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策。