java.awt.image

接口
异常
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 形式返回指定 band 中对应于 (x,y) 处像素的样本。
 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 设置指定 band 中对应于 DataBuffer (x,y) 处像素的样本。
 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 - 指定像素的 X 坐标
y - 指定像素的 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(其存储布局由 SinglePixelPackedSampleModel sppsm1 描述)传输到 DataBuffer db2(其存储布局由 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 形式返回指定 band 中对应于 (x,y) 处像素的样本。如果坐标不在边界内,则抛出 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(其存储布局由 SinglePixelPackedSampleModel sppsm1 描述)传输到 DataBuffer db2(其存储布局由 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 设置指定 band 中对应于 DataBuffer (x,y) 处像素的样本。如果坐标不在边界内,则抛出 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 方法在非空对象引用上实现相等关系:

  • 自反性:对于任何非空引用值 xx.equals(x) 都应返回 true
  • 对称性:对于任何非空引用值 xy,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true
  • 传递性:对于任何非空引用值 xyz,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回 true
  • 一致性:对于任何非空引用值 xy,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是对象上 equals 比较中所用的信息没有被修改。
  • 对于任何非空引用值 xx.equals(null) 都应返回 false

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 的常规协定是:

  • 在 Java 应用程序执行期间,在对同一对象多次调用 hashCode 方法时,必须一致地返回相同的整数,前提是将对象进行 equals 比较时所用的信息没有被修改。从某一应用程序的一次执行到同一应用程序的另一次执行,该整数无需保持一致。
  • 如果根据 equals(Object) 方法,两个对象是相等的,那么对这两个对象中的每个对象调用 hashCode 方法都必须生成相同的整数结果。
  • 如果根据 Object.equals(java.lang.Object) 方法,两个对象不相等,那么对这两个对象中的任一对象上调用 hashCode 方法 要求一定生成不同的整数结果。但是,程序员应该意识到,为不相等的对象生成不同整数结果可以提高哈希表的性能。

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

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