java.awt.image

接口
异常
java.lang.Object
  继承者 java.awt.image.SampleModel
      继承者 java.awt.image.ComponentSampleModel
          继承者 java.awt.image.BandedSampleModel

public final class BandedSampleModel
     
extends ComponentSampleModel

此类表示以 band 交错方式存储的图像数据,像素的每个样本都占用 DataBuffer 的一个数据元素。此类是 ComponentSampleModel 的子类,但是对于访问 band 交错图像数据来说,它提供的实现比 ComponentSampleModel 提供的实现更有效。当处理存储在不同 DataBuffer 存储单元中每个 band 样本数据的图像时,通常应该使用此类。由于提供了存取方法,因此可以直接对图像数据进行操作。像素间距是同一 扫描行上同一 band 的两个样本之间的数据数组元素数。BandedSampleModel 的像素间距为 1。扫描行间距是给定样本与下一扫描行的同一列中对应样本之间的数据数组元素数。band 偏移量表示从保存每个 band 的 DataBuffer 存储单元第一个数据数组元素到 band 第一个样本之间的数据数组元素数。这些 band 从 0 到 N-1 进行编号。存储单元索引表示数据缓冲区存储单元与图像数据 band 之间的对应关系。此类支持 TYPE_BYTETYPE_USHORTTYPE_SHORTTYPE_INTTYPE_FLOATTYPE_DOUBLE 数据类型。


字段摘要
 
从类 java.awt.image.ComponentSampleModel 继承的字段
bandOffsets, bankIndices, numBands, numBanks, pixelStride, scanlineStride
 
从类 java.awt.image.SampleModel 继承的字段
dataType, height, width
 
构造方法摘要
BandedSampleModel(int dataType, int w, int h, int numBands)
          构造一个具有指定参数的 BandedSampleModel。
BandedSampleModel(int dataType, int w, int h, int scanlineStride, int[] bankIndices, int[] bandOffsets)
          构造一个具有指定参数的 BandedSampleModel。
 
方法摘要
 SampleModel createCompatibleSampleModel(int w, int h)
          创建一个具有指定宽度和高度的新的 BandedSampleModel。
 DataBuffer createDataBuffer()
          创建一个与此 BandedSampleModel 对应的 DataBuffer,该 DataBuffer 的数据类型、存储单元数和大小都将与此 BandedSampleModel 一致。
 SampleModel createSubsetSampleModel(int[] bands)
          创建一个具有此 BandedSampleModel 的 band 子集的新 BandedSampleModel。
 Object getDataElements(int x, int y, Object obj, DataBuffer data)
          在 TransferType 类型基本数组中返回单个像素的数据。
 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) 处像素的样本。
 double getSampleDouble(int x, int y, int b, DataBuffer data)
          以 double 形式返回指定 band 中对应于 (x,y) 处像素的样本。
 float getSampleFloat(int x, int y, int b, DataBuffer data)
          以 float 形式返回指定 band 中对应于 (x,y) 处像素的样本。
 int[] getSamples(int x, int y, int w, int h, int b, int[] iArray, DataBuffer data)
          在 int 数组中返回指定 band 中对应于指定像素矩形的样本,每个数据数组元素对应一个样本。
 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 数组设置对应于像素矩形的所有样本,int 数组中每个数组元素包含一个样本。
 void setSample(int x, int y, int b, double s, DataBuffer data)
          使用输入的 double 值设置指定 band 中对应于 DataBuffer 中 (x,y) 处像素的样本。
 void setSample(int x, int y, int b, float s, DataBuffer data)
          使用输入的 float 值设置指定 band 中对应于 DataBuffer 中 (x,y) 处像素的样本。
 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 中对应于指定像素矩形的样本,int 数组中每个数据数组元素包含一个样本。
 
从类 java.awt.image.ComponentSampleModel 继承的方法
equals, getBandOffsets, getBankIndices, getNumDataElements, getOffset, getOffset, getPixelStride, getSampleSize, getSampleSize, getScanlineStride
 
从类 java.awt.image.SampleModel 继承的方法
getDataElements, getDataType, getHeight, getNumBands, getPixel, getPixel, getPixels, getPixels, getSamples, getSamples, getTransferType, getWidth, setDataElements, setPixel, setPixel, setPixels, setPixels, setSamples, setSamples
 
从类 java.lang.Object 继承的方法
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait
 

构造方法详细信息

BandedSampleModel

public BandedSampleModel(int dataType,
                         int w,
                         int h,
                         int numBands)
构造一个具有指定参数的 BandedSampleModel。像素间距将为一个数据元素。扫描行间距与宽度相同。每个 band 都存储在一个单独的存储单元中,所有 band 偏移量都为零。

参数:
dataType - 存储样本的数据类型。
w - 所描述的图像数据区域的宽度(以像素为单位)。
h - 所描述的图像数据区域的高度(以像素为单位)。
numBands - 图像数据的 band 数。
抛出:
IllegalArgumentException - 如果 dataType 不是受支持的数据类型之一

BandedSampleModel

public BandedSampleModel(int dataType,
                         int w,
                         int h,
                         int scanlineStride,
                         int[] bankIndices,
                         int[] bandOffsets)
构造一个具有指定参数的 BandedSampleModel。可以从 bandOffsets bankIndices 数组的长度推断 band 数,它们必须相等。像素间距将为一个数据元素。

参数:
dataType - 存储样本的数据类型。
w - 所描述的图像数据区域的宽度(以像素为单位)。
h - 所描述的图像数据区域的高度(以像素为单位)。
scanlineStride - 图像数据的行间距。
bankIndices - 每个 band 的存储单元索引。
bandOffsets - 每个 band 的 band 偏移量。
抛出:
IllegalArgumentException - 如果 dataType 不是受支持的数据类型之一
方法详细信息

createCompatibleSampleModel

public SampleModel createCompatibleSampleModel(int w,
                                               int h)
创建一个具有指定宽度和高度的新的 BandedSampleModel。新 BandedSampleModel 将具有与此 BandedSampleModel 相同的 band 数、存储数据类型和存储单元索引。band 偏移量将被压缩,使得 band 之间的偏移量为 w*pixelStride,并且所有 band 偏移量的最小值为零。

覆盖:
ComponentSampleModel 中的 createCompatibleSampleModel
参数:
w - 得到的 BandedSampleModel 的宽度
h - 得到的 BandedSampleModel 的高度
返回:
具有指定宽度和高度的新 BandedSampleModel
抛出:
IllegalArgumentException - 如果 wh 等于 Integer.MAX_VALUEInteger.MIN_VALUE
IllegalArgumentException - 如果 dataType 不是受支持的数据类型之一

createSubsetSampleModel

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

覆盖:
ComponentSampleModel 中的 createSubsetSampleModel
参数:
bands - 此 ComponentSampleModel 的 band 子集
返回:
已创建的具有此 ComponentSampleModel band 子集的 ComponentSampleModel
抛出:
RasterFormatException - 如果 band 数大于此样本模型中的存储单元数。
IllegalArgumentException - 如果 dataType 不是受支持的数据类型之一

createDataBuffer

public DataBuffer createDataBuffer()
创建一个与此 BandedSampleModel 对应的 DataBuffer,该 DataBuffer 的数据类型、存储单元数和大小都将与此 BandedSampleModel 一致。

覆盖:
ComponentSampleModel 中的 createDataBuffer
返回:
数据类型、存储单元的数量和大小与此 ComponentSampleModel 一致的 DataBuffer
抛出:
IllegalArgumentException - 如果 dataType 不是受支持的类型之一。

getDataElements

public Object getDataElements(int x,
                              int y,
                              Object obj,
                              DataBuffer data)
在 TransferType 类型基本数组中返回单个像素的数据。对于 BandedSampleModel,返回的数据与 data 类型相同,并将对每个数组元素返回一个样本。通常,obj 作为 null 传入,从而 Object 将被自动创建,并具有正确的基本数据类型。

以下代码说明了如何将一个像素的数据从 DataBuffer db1(其存储布局由 BandedSampleModel bsm1 描述)传输到 DataBuffer db2(其存储布局由 BandedSampleModel bsm2 描述)。通常,该传输比使用 getPixel/setPixel 方法更高效。

             BandedSampleModel bsm1, bsm2;
             DataBufferInt db1, db2;
             bsm2.setDataElements(x, y, bsm1.getDataElements(x, y, null, db1),
                            db2);
 
如果两个 SampleModel 具有相同的 band 数,相应 band 的每个样本具有相同的位数,且 TransferType 相同,则使用 getDataElements/setDataElements 在这两个 DataBuffer/SampleModel 对之间传输数据是合法的。

如果 obj 不为 null,则它应该是一个 TransferType 类型基本数组。否则抛出 ClassCastException。如果坐标不在边界内部,或者 obj 不为 null 且大小不足以容纳像素数据,则抛出 ArrayIndexOutOfBoundsException。

覆盖:
ComponentSampleModel 中的 getDataElements
参数:
x - 像素位置的 X 坐标
y - 像素位置的 Y 坐标
obj - 如果不为 null,则为一个接收返回像素数据的基本数组。
data - 包含图像数据的 DataBuffer。
返回:
指定像素的数据。
另请参见:
setDataElements(int, int, Object, DataBuffer)

getPixel

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

覆盖:
ComponentSampleModel 中的 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。

覆盖:
ComponentSampleModel 中的 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。

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

getSampleFloat

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

覆盖:
ComponentSampleModel 中的 getSampleFloat
参数:
x - 像素位置的 X 坐标
y - 像素位置的 Y 坐标
b - 要返回的 band
data - 包含图像数据的 DataBuffer
返回:
一个 float 值,表示指定 band 中对应于指定像素的样本。

getSampleDouble

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

覆盖:
ComponentSampleModel 中的 getSampleDouble
参数:
x - 像素位置的 X 坐标
y - 像素位置的 Y 坐标
b - 要返回的 band
data - 包含图像数据的 DataBuffer
返回:
一个 double 值,表示指定 band 中对应于指定像素的样本。

getSamples

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

覆盖:
ComponentSampleModel 中的 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 中单个像素的数据。对于 BandedSampleModel,设置的数据与 data 类型相同,且每个数组元素传输一个样本。

以下代码说明了如何将一个像素的数据从 DataBuffer db1(其存储布局由 BandedSampleModel bsm1 描述)传输到 DataBuffer db2(其存储布局由 BandedSampleModel bsm2 描述)。通常,该传输比使用 getPixel/setPixel 更高效。

             BandedSampleModel bsm1, bsm2;
             DataBufferInt db1, db2;
             bsm2.setDataElements(x, y, bsm1.getDataElements(x, y, null, db1),
                            db2);
 
如果两个 SampleModels 具有相同的 band 数,相应 band 的每个样本具有相同的位数,且 TransferTypes 相同,则使用 getDataElements/setDataElements 在这两个 DataBuffer/SampleModel 对之间传输数据是合法的。

obj 必须是一个 TransferType 类型基本数组。否则抛出 ClassCastException。如果坐标不在边界内部,或者 obj 的大小不足以容纳像素数据,则抛出 ArrayIndexOutOfBoundsException。

覆盖:
ComponentSampleModel 中的 setDataElements
参数:
x - 像素位置的 X 坐标
y - 像素位置的 Y 坐标
obj - 如果不为 null,则返回此对象中的基本数组
data - 包含图像数据的 DataBuffer
另请参见:
getDataElements(int, int, Object, DataBuffer)

setPixel

public void setPixel(int x,
                     int y,
                     int[] iArray,
                     DataBuffer data)
使用输入样本的 int 数组设置 DataBuffer 中的像素。如果坐标不在边界内部,则抛出 ArrayIndexOutOfBoundsException。

覆盖:
ComponentSampleModel 中的 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 数组设置对应于像素矩形的所有样本,int 数组中每个数组元素包含一个样本。如果坐标不在边界内部,则抛出 ArrayIndexOutOfBoundsException。

覆盖:
ComponentSampleModel 中的 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。

覆盖:
ComponentSampleModel 中的 setSample
参数:
x - 像素位置的 X 坐标
y - 像素位置的 Y 坐标
b - 要设置的 band
s - 输入的样本(int 形式)
data - 包含图像数据的 DataBuffer
另请参见:
getSample(int, int, int, DataBuffer)

setSample

public void setSample(int x,
                      int y,
                      int b,
                      float s,
                      DataBuffer data)
使用输入的 float 值设置指定 band 中对应于 DataBuffer 中 (x,y) 处像素的样本。如果坐标不在边界内部,则抛出 ArrayIndexOutOfBoundsException。

覆盖:
ComponentSampleModel 中的 setSample
参数:
x - 像素位置的 X 坐标
y - 像素位置的 Y 坐标
b - 要设置的 band
s - 输入的样本(float 形式)
data - 包含图像数据的 DataBuffer
另请参见:
getSample(int, int, int, DataBuffer)

setSample

public void setSample(int x,
                      int y,
                      int b,
                      double s,
                      DataBuffer data)
使用输入的 double 值设置指定 band 中对应于 DataBuffer 中 (x,y) 处像素的样本。如果坐标不在边界内部,则抛出 ArrayIndexOutOfBoundsException。

覆盖:
ComponentSampleModel 中的 setSample
参数:
x - 像素位置的 X 坐标
y - 像素位置的 Y 坐标
b - 要设置的 band
s - 输入的样本(为一个 double 值)
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 中对应于指定像素矩形的样本,int 数组中每个数据数组元素包含一个样本。如果坐标不在边界内部,则抛出 ArrayIndexOutOfBoundsException。

覆盖:
ComponentSampleModel 中的 setSamples
参数:
x - 像素位置左上角的 X 坐标
y - 像素位置左上角的 Y 坐标
w - 像素矩形的宽度
h - 像素矩形的高度
b - 要设置的 band
iArray - 输入的样本数组
data - 包含图像数据的 DataBuffer
另请参见:
getSamples(int, int, int, int, int, int[], DataBuffer)

hashCode

public int hashCode()
从类 Object 复制的描述
返回该对象的哈希码值。支持此方法是为了提高哈希表(例如 java.util.Hashtable 提供的哈希表)的性能。

hashCode 的常规协定是:

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

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

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