JavaTM 2 Platform
Standard Ed. 5.0

java.awt.image
类 MultiPixelPackedSampleModel

java.lang.Object
  继承者 java.awt.image.SampleModel
      继承者 java.awt.image.MultiPixelPackedSampleModel

public class MultiPixelPackedSampleModel
extends SampleModel

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()
          返回通过 getDataElementssetDataElements 方法传输像素所使用的 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
 

构造方法详细信息

MultiPixelPackedSampleModel

public MultiPixelPackedSampleModel(int dataType,
                                   int w,
                                   int h,
                                   int numberOfBits)
构造一个具有指定数据类型、宽度、高度和每个像素位数的 MultiPixelPackedSampleModel

参数:
dataType - 存储采样的数据类型
w - 所描述的图像数据区域的宽度,以像素为单位
h - 所描述的图像数据区域的高度,以像素为单位
numberOfBits - 每个像素的位数
抛出:
IllegalArgumentException - 如果 dataType 不是 DataBuffer.TYPE_BYTEDataBuffer.TYPE_USHORTDataBuffer.TYPE_INT 之一

MultiPixelPackedSampleModel

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 - 如果 wh 不大于 0
IllegalArgumentException - 如果 dataType 不是 DataBuffer.TYPE_BYTEDataBuffer.TYPE_USHORTDataBuffer.TYPE_INT 之一
方法详细信息

createCompatibleSampleModel

public SampleModel createCompatibleSampleModel(int w,
                                               int h)
构造一个具有指定宽度和高度的新 MultiPixelPackedSampleModel。这个新的 MultiPixelPackedSampleModel 具有和此 MultiPixelPackedSampleModel 相同的存储数据类型和每像素位数。

指定者:
SampleModel 中的 createCompatibleSampleModel
参数:
w - 指定的宽度
h - 指定的高度
返回:
具有指定宽度和高度,并且具有与此 MultiPixelPackedSampleModel 相同的存储数据类型和每像素位数的 SampleModel
抛出:
IllegalArgumentException - 如果 wh 不大于 0

createDataBuffer

public DataBuffer createDataBuffer()
创建一个与此 MultiPixelPackedSampleModel 对应的 DataBuffer。该 DataBuffer 对象的数据类型和大小与此 MultiPixelPackedSampleModel 一致。DataBuffer 具有单个存储单元。

指定者:
SampleModel 中的 createDataBuffer
返回:
具有与此 MultiPixelPackedSampleModel 相同的数据类型和大小的 DataBuffer

getNumDataElements

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
返回:
数据元素数。
另请参见:
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()

getSampleSize

public int[] getSampleSize()
返回所有 band 每个采样的位数。

指定者:
SampleModel 中的 getSampleSize
返回:
每个采样的位数。

getSampleSize

public int getSampleSize(int band)
返回指定 band 每个采样的位数。

指定者:
SampleModel 中的 getSampleSize
参数:
band - 指定的 band
返回:
指定 band 每个采样的位数。

getOffset

public int getOffset(int x,
                     int y)
返回数据数组元素中像素 (x, y) 的偏移量。

参数:
x, y - 指定的像素
返回:
指定像素的偏移量。

getBitOffset

public int getBitOffset(int x)
返回数据元素中存储扫描行第 x 个像素的偏移量(以位为单位)。此偏移量对于所有扫描行相同。

参数:
x - 指定的像素
返回:
指定像素的位偏移量。

getScanlineStride

public int getScanlineStride()
返回扫描行的跨度。

返回:
MultiPixelPackedSampleModel 的扫描行跨度。

getPixelBitStride

public int getPixelBitStride()
返回像素位跨度,以位为单位。此值与每像素的位数相同。

返回:
MultiPixelPackedSampleModelpixelBitStride

getDataBitOffset

public int getDataBitOffset()
返回数据位的偏移量(以位为单位)。

返回:
MultiPixelPackedSampleModeldataBitOffset

getTransferType

public int getTransferType()
返回通过 getDataElementssetDataElements 方法传输像素所使用的 TransferType。该 TransferType 可能与存储 DataType 相同,也可能不同。TransferType 是 DataBuffer.TYPE_BYTE、DataBuffer.TYPE_USHORT 或 DataBuffer.TYPE_INT 之一。

覆盖:
SampleModel 中的 getTransferType
返回:
transfertype。
另请参见:
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

createSubsetSampleModel

public SampleModel createSubsetSampleModel(int[] bands)
创建一个具有此 MultiPixelPackedSampleModel 的 band 子集的新 MultiPixelPackedSampleModel。因为 MultiPixelPackedSampleModel 只有一个 band,所以 bands 参数的长度必须为一并指示第零个 band。

指定者:
SampleModel 中的 createSubsetSampleModel
参数:
bands - 指定的 band
返回:
具有此 MultiPixelPackedSampleModel 带子集的新 SampleModel
抛出:
RasterFormatException - 如果请求的 band 数不是一。
IllegalArgumentException - 如果 wh 不大于 0

getSample

public int getSample(int x,
                     int y,
                     int b,
                     DataBuffer data)
返回以 int 表示的、像素 (x, y) 指定 band 中的采样。如果坐标超出了范围,则抛出 ArrayIndexOutOfBoundsException

指定者:
SampleModel 中的 getSample
参数:
x, y - 指定像素的坐标
b - 返回的 band,假定为 0
data - 包含图像数据的 DataBuffer
返回:
包含指定像素采样的指定 band
抛出:
ArrayIndexOutOfBoundException - 如果指定的坐标超出了范围。
另请参见:
setSample(int, int, int, int, DataBuffer)

setSample

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,假定为 0
s - int 形式的输入采样
data - 存储图像数据的 DataBuffer
抛出:
ArrayIndexOutOfBoundsException - 如果坐标超出了范围。
另请参见:
getSample(int, int, int, DataBuffer)

getDataElements

public Object getDataElements(int x,
                              int y,
                              Object obj,
                              DataBuffer data)
以 TransferType 类型的基本数组形式返回单个像素的数据。对于 MultiPixelPackedSampleModel,该数组有一个元素,类型是可保存单个像素的 DataBuffer.TYPE_BYTE、DataBuffer.TYPE_USHORT 或 DataBuffer.TYPE_INT 中的最小值。通常,传入的 obj 应该为 null,这样可自动创建 Object 并具有正确的基本数据类型。

下面的代码说明了将一个像素的数据从 DataBuffer db1(其存储布局由 MultiPixelPackedSampleModel mppsm1 描述)传输到 DataBuffer db2(其存储布局由 MultiPixelPackedSampleModel mppsm2 描述)。该传输通常比使用 getPixelsetPixel 更为高效。

             MultiPixelPackedSampleModel mppsm1, mppsm2;
             DataBufferInt db1, db2;
             mppsm2.setDataElements(x, y, mppsm1.getDataElements(x, y, null,
                              db1), db2);
 
如果各个 SampleModel 具有相同的 band 数,相应的 band 具有相同的每采样位数,并且 TransferType 也相同,则使用 getDataElementssetDataElements 在两个 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)

getPixel

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)

setDataElements

public void setDataElements(int x,
                            int y,
                            Object obj,
                            DataBuffer data)
根据 TransferType 类型的基本数组设置指定 DataBuffer 中单个像素的数据。对于 MultiPixelPackedSampleModel,仅数组的首个元素才保存有效数据,并且类型必须是可以保存单个像素的 DataBuffer.TYPE_BYTE、DataBuffer.TYPE_USHORT 或 DataBuffer.TYPE_INT 的最小值。

下面的代码说明了将一个像素的数据从 DataBuffer db1(其存储布局由 MultiPixelPackedSampleModel mppsm1 所描述)传输到 DataBuffer db2(其存储布局由 MultiPixelPackedSampleModel mppsm2 所描述)。该传输通常比使用 getPixelsetPixel 更为高效。

             MultiPixelPackedSampleModel mppsm1, mppsm2;
             DataBufferInt db1, db2;
             mppsm2.setDataElements(x, y, mppsm1.getDataElements(x, y, null,
                              db1), db2);
 
如果各个 SampleModel 对象具有相同的 band 数,相应的 band 具有相同的每采样位数,并且 TransferType 也相同,则使用 getDataElementssetDataElements 在两个 DataBuffer/SampleModel 对之间进行传输是合法的。

obj 必须是 TransferType 类型的基本数组。否则会抛出 ClassCastException。如果坐标超出了范围,或者 obj 不足以保存该像素数据,则抛出 ArrayIndexOutOfBoundsException

指定者:
SampleModel 中的 setDataElements
参数:
x, y - 像素位置的坐标
obj - 包含像素数据的基本数组
data - 包含图像数据的 DataBuffer
另请参见:
getDataElements(int, int, Object, DataBuffer)

setPixel

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)

equals

public boolean equals(Object o)
从类 Object 复制的描述
指示某个其他对象是否与此对象“相等”。

equals 方法在非空对象引用上实现相等关系:

Object 类的 equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值 xy,当且仅当 xy 引用同一个对象时,此方法才返回 truex == y 具有值 true)。

注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。

覆盖:
Object 中的 equals
参数:
o - 要与之比较的引用对象。
返回:
如果此对象与 obj 参数相同,则返回 true;否则返回 false
另请参见:
Object.hashCode(), Hashtable

hashCode

public int hashCode()
从类 Object 复制的描述
返回该对象的哈希码值。支持该方法是为哈希表提供一些优点,例如,java.util.Hashtable 提供的哈希表。

hashCode 的常规协定是:

实际上,由 Object 类定义的 hashCode 方法确实会针对不同的对象返回不同的整数。(这一般是通过将该对象的内部地址转换成一个整数来实现的,但是 JavaTM 编程语言不需要这种实现技巧。)

覆盖:
Object 中的 hashCode
返回:
此对象的一个哈希码值。
另请参见:
Object.equals(java.lang.Object), Hashtable

JavaTM 2 Platform
Standard Ed. 5.0

提交错误或意见
有关更多的 API 参考资料和开发人员文档,请参阅 Java 2 SDK SE 开发人员文档。该文档包含更详细的、面向开发人员的描述,以及总体概述、术语定义、使用技巧和工作代码示例。

版权所有 2004 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策