JavaTM Platform
Standard Ed. 6

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 形式返回指定 band 中对应于 (x, y) 处像素的样本。
 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,设置指定 band 中对应于 DataBuffer (x,y) 处像素的样本。
 
从类 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 - 指定的高度
返回:
一个 SampleModel,具有指定宽度和高度,并且具有与此 MultiPixelPackedSampleModel 相同的存储数据类型和每像素位数。
抛出:
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 - 指定像素的 X 坐标
y - 指定像素的 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 参数的长度必须为 1,指示第 0 个 band。

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

getSample

public int getSample(int x,
                     int y,
                     int b,
                     DataBuffer data)
int 形式返回指定 band 中对应于 (x, y) 处像素的样本。如果坐标超出了范围,则抛出 ArrayIndexOutOfBoundsException

指定者:
SampleModel 中的 getSample
参数:
x - 指定像素的 X 坐标
y - 指定像素的 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,设置指定 band 中对应于 DataBuffer (x,y) 处像素的样本。如果坐标超出了范围,则抛出 ArrayIndexOutOfBoundsException

指定者:
SampleModel 中的 setSample
参数:
x - 指定像素的 X 坐标
y - 指定像素的 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 - 指定像素的 X 坐标
y - 指定像素的 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 - 像素位置的 X 坐标
y - 像素位置的 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 - 像素位置的 X 坐标
y - 像素位置的 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 - 像素位置的 X 坐标
y - 像素位置的 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 Platform
Standard Ed. 6

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

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