JavaTM 2 Platform
Standard Ed. 5.0

java.awt.image
类 SinglePixelPackedSampleModel

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

public class SinglePixelPackedSampleModel
extends SampleModel

此类表示压缩的像素数据:将 N 个样本组成的单个像素存储在单个数据数组元素中,每个数据数组元素只保存一个像素的样本。此类支持 TYPE_BYTETYPE_USHORTTYPE_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 形式返回 (x,y) 处像素的指定 band 中的样本。
 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 设置 DataBuffer 中 (x,y) 处像素的指定 band 中的样本。
 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
 

构造方法详细信息

SinglePixelPackedSampleModel

public SinglePixelPackedSampleModel(int dataType,
                                    int w,
                                    int h,
                                    int[] bitMasks)
构造一个具有 bitMasks.length band 的 SinglePixelPackedSampleModel。每个样本都存储在数据数组元素中其对应位掩码的位置处。每个位掩码必须是邻接的且掩码不能重叠。

参数:
dataType - 存储样本使用的数据类型。
w - 所描述的图像数据区域的(像素)宽度。
h - 所描述的图像数据区域的(像素)高度。
bitMasks - 所有 band 的位掩码。
抛出:
IllegalArgumentException - 如果 dataType 不是 DataBuffer.TYPE_BYTEDataBuffer.TYPE_USHORTDataBuffer.TYPE_INT

SinglePixelPackedSampleModel

public SinglePixelPackedSampleModel(int dataType,
                                    int w,
                                    int h,
                                    int scanlineStride,
                                    int[] bitMasks)
构造一个 SinglePixelPackedSampleModel,它具有 bitMasks.length band,并且扫描行跨距等于 scanlineStride 数据数组元素。每个样本都存储在数据数组元素中其对应位掩码的位置处。每个位掩码必须是邻接的且掩码不能重叠。

参数:
dataType - 存储样本使用的数据类型。
w - 所描述的图像数据区域的(像素)宽度。
h - 所描述的图像数据区域的(像素)高度。
scanlineStride - 图像数据的行跨距。
bitMasks - 所有 band 的位掩码。
抛出:
IllegalArgumentException - 如果 wh 不大于 0
IllegalArgumentException - 如果 bitMask 中的任何掩码不相邻
IllegalArgumentException - 如果 dataType 不是 DataBuffer.TYPE_BYTEDataBuffer.TYPE_USHORTDataBuffer.TYPE_INT
方法详细信息

getNumDataElements

public int getNumDataElements()
返回通过 getDataElements 和 setDataElements 方法传输一个像素所需的数据元素数。对于 SinglePixelPackedSampleModel,此元素数为 1。

指定者:
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()

createCompatibleSampleModel

public SampleModel createCompatibleSampleModel(int w,
                                               int h)
创建一个具有指定宽度和高度的新 SinglePixelPackedSampleModel。新 SinglePixelPackedSampleModel 的存储数据类型和位掩码与此 SinglePixelPackedSampleModel 相同。

指定者:
SampleModel 中的 createCompatibleSampleModel
参数:
w - 得到的 SampleModel 的宽度
h - 得到的 SampleModel 的高度
返回:
具有指定宽度和高度的 SinglePixelPackedSampleModel
抛出:
IllegalArgumentException - 如果 wh 不大于 0

createDataBuffer

public DataBuffer createDataBuffer()
创建一个对应于此 SinglePixelPackedSampleModel 的 DataBuffer。DataBuffer 的数据类型和大小将与此 SinglePixelPackedSampleModel 一致。DataBuffer 只有一个存储单元。

指定者:
SampleModel 中的 createDataBuffer
返回:
对应于此 SampleModelDataBuffer

getSampleSize

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

指定者:
SampleModel 中的 getSampleSize
返回:
所有 band 样本的大小。

getSampleSize

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

指定者:
SampleModel 中的 getSampleSize
参数:
band - 指定的 band
返回:
指定 band 样本的大小。

getOffset

public int getOffset(int x,
                     int y)
返回像素 (x,y)(在数据数组元素中)的偏移量。包含像素 x,y 的数据元素可以使用 SinglePixelPackedSampleModel sppsm 从 DataBuffer data 中检索:
        data.getElem(sppsm.getOffset(x, y));
 

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

getBitOffsets

public int[] getBitOffsets()
返回表示所有 band 的一个像素的数据数组元素中的位偏移量。

返回:
表示所有 band 的一个像素的位偏移量。

getBitMasks

public int[] getBitMasks()
返回所有 band 的位掩码。

返回:
所有 band 的位掩码。

getScanlineStride

public int getScanlineStride()
返回此 SinglePixelPackedSampleModel 的扫描行跨距。

返回:
SinglePixelPackedSampleModel 的扫描行跨距。

createSubsetSampleModel

public SampleModel createSubsetSampleModel(int[] bands)
创建一个新 SinglePixelPackedSampleModel,它具有此 SinglePixelPackedSampleModel 的 band 子集。新 SinglePixelPackedSampleModel 可以使用现有 SinglePixelPackedSampleModel 可以使用的 DataBuffer。新 SinglePixelPackedSampleModel/DataBuffer 组合将表示具有原始 SinglePixelPackedSampleModel/DataBuffer 组合的 band 子集的图像。

指定者:
SampleModel 中的 createSubsetSampleModel
参数:
bands - 此 SampleModel 的 band 子集
返回:
具有此 SampleModel 的 band 子集的 SampleModel
抛出:
RasterFormatException - 如果 band 参数的长度大于样本模型中 band 的数量。

getDataElements

public Object getDataElements(int x,
                              int y,
                              Object obj,
                              DataBuffer data)
返回 TransferType 类型的基本数组中单个像素的数据。对于 SinglePixelPackedSampleModel,数组将有一个元素,并且类型将与存储数据类型相同。通常,传递进来的 obj 为 null,因此 Object 将被自动创建,并将具有正确的基本数据类型。

以下代码阐释了如何将一个像素的数据从 DataBuffer db1 传输到 DataBuffer db2,前者的存储布局由 SinglePixelPackedSampleModel sppsm1 描述,后者的存储布局由 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)

getPixel

public int[] getPixel(int x,
                      int y,
                      int[] iArray,
                      DataBuffer data)
在一个 int 型数组中返回指定像素的所有样本。如果坐标不在边界内,则抛出 ArrayIndexOutOfBoundsException。

覆盖:
SampleModel 中的 getPixel
参数:
x - 像素位置的 X 坐标。
y - 像素位置的 Y 坐标。
iArray - 如果为非 null,则返回此数组中的样本
data - 包含图像数据的 DataBuffer。
返回:
指定像素的所有样本。
另请参见:
setPixel(int, int, int[], DataBuffer)

getPixels

public int[] getPixels(int x,
                       int y,
                       int w,
                       int h,
                       int[] iArray,
                       DataBuffer data)
在一个 int 型数组中返回指定像素矩形的所有样本,每个数组元素一个样本。如果坐标不在边界内,则抛出 ArrayIndexOutOfBoundsException。

覆盖:
SampleModel 中的 getPixels
参数:
x - 左上角像素位置的 X 坐标。
y - 左上角像素位置的 Y 坐标。
w - 像素矩形的宽度。
h - 像素矩形的高度。
iArray - 如果为非 null,则在此数组中返回样本。
data - 包含图像数据的 DataBuffer。
返回:
指定像素区域的所有样本。
另请参见:
setPixels(int, int, int, int, int[], DataBuffer)

getSample

public int getSample(int x,
                     int y,
                     int b,
                     DataBuffer data)
以 int 形式返回 (x,y) 处像素的指定 band 中的样本。如果坐标不在边界内,则抛出 ArrayIndexOutOfBoundsException。

指定者:
SampleModel 中的 getSample
参数:
x - 像素位置的 X 坐标。
y - 像素位置的 Y 坐标。
b - 要返回的 band。
data - 包含图像数据的 DataBuffer。
返回:
指定像素的指定 band 中的样本。
另请参见:
setSample(int, int, int, int, DataBuffer)

getSamples

public int[] getSamples(int x,
                        int y,
                        int w,
                        int h,
                        int b,
                        int[] iArray,
                        DataBuffer data)
在一个 int 型数组中返回指定像素矩形的指定 band 的样本,每个数组元素一个样本。如果坐标不在边界内,则抛出 ArrayIndexOutOfBoundsException。

覆盖:
SampleModel 中的 getSamples
参数:
x - 左上角像素位置的 X 坐标。
y - 左上角像素位置的 Y 坐标。
w - 像素矩形的宽度。
h - 像素矩形的高度。
b - 要返回的 band。
iArray - 如果为非 null,则在此数组中返回样本。
data - 包含图像数据的 DataBuffer。
返回:
指定像素区域的指定 band 的样本。
另请参见:
setSamples(int, int, int, int, int, int[], DataBuffer)

setDataElements

public void setDataElements(int x,
                            int y,
                            Object obj,
                            DataBuffer data)
根据 TransferType 类型的基本数组设置指定 DataBuffer 中单个像素的数据。对于 SinglePixelPackedSampleModel,只有数组的第一个元素将保存有效值,且数组类型必须与 SinglePixelPackedSampleModel 的存储数据类型相同。

以下代码阐释了如何将一个像素的数据从 DataBuffer db1 传输到 DataBuffer db2,前者的存储布局由 SinglePixelPackedSampleModel sppsm1 描述,后者的存储布局由 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)

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)

setPixels

public void setPixels(int x,
                      int y,
                      int w,
                      int h,
                      int[] iArray,
                      DataBuffer data)
根据为每个数组元素包含一个样本的 int 数组设置像素矩形的所有样本。如果坐标不在边界内,则抛出 ArrayIndexOutOfBoundsException。

覆盖:
SampleModel 中的 setPixels
参数:
x - 左上角像素位置的 X 坐标。
y - 左上角像素位置的 Y 坐标。
w - 像素矩形的宽度。
h - 像素矩形的高度。
iArray - int 数组中的输入样本。
data - 包含图像数据的 DataBuffer。
另请参见:
getPixels(int, 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 - 像素位置的 X 坐标。
y - 像素位置的 Y 坐标。
b - 要设置的 band。
s - int 形式的输入样本。
data - 包含图像数据的 DataBuffer。
另请参见:
getSample(int, int, int, DataBuffer)

setSamples

public void setSamples(int x,
                       int y,
                       int w,
                       int h,
                       int b,
                       int[] iArray,
                       DataBuffer data)
根据为每个数组元素包含一个样本的 int 数组设置指定像素矩形的指定 band 中的样本。如果坐标不在边界内,则抛出 ArrayIndexOutOfBoundsException。

覆盖:
SampleModel 中的 setSamples
参数:
x - 左上角像素位置的 X 坐标。
y - 左上角像素位置的 Y 坐标。
w - 像素矩形的宽度。
h - 像素矩形的高度。
b - 要设置的 band。
iArray - int 数组中的输入样本。
data - 包含图像数据的 DataBuffer。
另请参见:
getSamples(int, int, int, 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. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策