模块 java.desktop

类 BandedSampleModel


public final class BandedSampleModel extends ComponentSampleModel
此类表示以波段交错方式存储的图像数据,像素的每个样本占用 DataBuffer 的一个数据元素。它是 ComponentSampleModel 的子类,但提供了比 ComponentSampleModel 更有效的访问波段交错图像数据的实现。在处理将每个波段的样本数据存储在 DataBuffer 的不同库中的图像时,通常应使用此类。提供访问器方法以便可以直接操作图像数据。像素跨度是同一扫描线上同一波段的两个样本之间的数据数组元素数。 BandedSampleModel 的像素步幅为 1。扫描线跨度是给定样本与下一个扫描线同一列中的相应样本之间的数据数组元素的数量。带偏移量表示从保存每个带的 DataBuffer 库的第一个数据数组元素到带的第一个样本的数据数组元素的数量。条带从 0 到 N-1 编号。 Bank索引表示数据缓冲区的bank和图像数据的band之间的对应关系。此类支持 TYPE_BYTE TYPE_USHORT TYPE_SHORT TYPE_INT TYPE_FLOAT TYPE_DOUBLE 数据类型
  • 构造方法详细信息

    • BandedSampleModel

      public BandedSampleModel(int dataType, int w, int h, int numBands)
      构造具有指定参数的 BandedSampleModel。像素跨度将是一个数据元素。扫描线步幅将与宽度相同。每个波段将存储在一个单独的库中,所有波段偏移量都将为零。
      参数:
      dataType - 存储样本的数据类型。
      w - 描述的图像数据区域的宽度(以像素为单位)。
      h - 描述的图像数据区域的高度(以像素为单位)。
      numBands - 图像数据的波段数。
      抛出:
      IllegalArgumentException - 如果 wh 不都大于 0
      IllegalArgumentException - 如果 wh 的乘积大于 Integer.MAX_VALUE
      IllegalArgumentException - 如果 numBands 不 > 0
      IllegalArgumentException - 如果 dataType 不是此示例模型支持的数据类型之一。
    • BandedSampleModel

      public BandedSampleModel(int dataType, int w, int h, int scanlineStride, int[] bankIndices, int[] bandOffsets)
      构造具有指定参数的 BandedSampleModel。波段数将从 bandOffsets bankIndices 数组的长度推断出来,该数组必须相等。像素跨度将是一个数据元素。
      参数:
      dataType - 存储样本的数据类型。
      w - 描述的图像数据区域的宽度(以像素为单位)。
      h - 描述的图像数据区域的高度(以像素为单位)。
      scanlineStride - 图像数据的行跨度。
      bankIndices - 每个频段的银行索引。
      bandOffsets - 每个波段的波段偏移。
      抛出:
      IllegalArgumentException - 如果 wh 不都大于 0
      IllegalArgumentException - 如果 wh 的乘积大于 Integer.MAX_VALUE
      IllegalArgumentException - 如果 scanlineStride 小于 0
      NullPointerException - 如果 bankIndicesnull
      NullPointerException - 如果 bandOffsetsnull
      IllegalArgumentException - 如果 bandOffsets.length 为 0
      IllegalArgumentException - 如果 bankIndices 的长度不等于 bandOffsets 的长度
      IllegalArgumentException - 如果 bandIndices 的任何银行索引小于 0
      IllegalArgumentException - 如果 dataType 不是此示例模型支持的数据类型之一
  • 方法详情

    • createCompatibleSampleModel

      public SampleModel  createCompatibleSampleModel(int w, int h)
      创建具有指定宽度和高度的新 BandedSampleModel。新的 BandedSampleModel 将具有与此 BandedSampleModel 相同的波段数、存储数据类型和银行索引。波段偏移量将被压缩,使得波段之间的偏移量将为 w*pixelStride,并且所有波段偏移量的最小值为零。
      重写:
      createCompatibleSampleModel 在类 ComponentSampleModel
      参数:
      w - 结果 BandedSampleModel 的宽度
      h - 生成的 BandedSampleModel 的高度
      返回:
      具有指定宽度和高度的新 BandedSampleModel
      抛出:
      IllegalArgumentException - 如果 wh 等于 Integer.MAX_VALUEInteger.MIN_VALUE
      IllegalArgumentException - 如果 dataType 不是受支持的数据类型之一
    • createSubsetSampleModel

      public SampleModel  createSubsetSampleModel(int[] bands)
      使用此 BandedSampleModel 的波段子集创建一个新的 BandedSampleModel。新的 BandedSampleModel 可以与现有 BandedSampleModel 可以使用的任何 DataBuffer 一起使用。新的 BandedSampleModel/DataBuffer 组合将表示具有原始 BandedSampleModel/DataBuffer 组合的波段子集的图像。
      重写:
      createSubsetSampleModel 在类 ComponentSampleModel
      参数:
      bands - 来自这个 ComponentSampleModel 的波段子集
      返回:
      ComponentSampleModel 使用来自此 ComponentSampleModel 的波段子集创建。
      抛出:
      RasterFormatException - 如果波段数大于此样本模型中的银行数。
      IllegalArgumentException - 如果 dataType 不是受支持的数据类型之一
    • createDataBuffer

      public DataBuffer  createDataBuffer()
      创建一个与这个BandedSampleModel对应的DataBuffer,DataBuffer的数据类型、bank数量、大小都会和这个BandedSampleModel保持一致。
      重写:
      createDataBuffer 在类 ComponentSampleModel
      返回:
      a DataBuffer 其数据类型、bank 数量和大小与此 ComponentSampleModel 一致。
      抛出:
      IllegalArgumentException - 如果 dataType 不是受支持的类型之一。
    • getDataElements

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

      以下代码说明了将一个像素的数据从 DataBuffer db1 传输到 DataBuffer db2,其存储布局由 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 具有相同数量的波段,相应的波段具有相同的每个样本位数,并且 TransferTypes 相同,则使用 getDataElements/setDataElements 在两个 DataBuffer/SampleModel 对之间传输是合法的。

      如果 obj 不为空,则它应该是 TransferType 类型的原始数组。否则,将抛出 ClassCastException。如果坐标不在边界内,或者如果 obj 不为空且不够大以容纳像素数据,则可能会抛出 ArrayIndexOutOfBoundsException。

      重写:
      getDataElements 在类 ComponentSampleModel
      参数:
      x - 像素位置的X坐标
      y - 像素位置的Y坐标
      obj - 如果非空,则返回像素数据的原始数组。
      data - 包含图像数据的 DataBuffer。
      返回:
      指定像素的数据。
      参见:
    • getPixel

      public int[] getPixel(int x, int y, int[] iArray, DataBuffer  data)
      返回 int 数组中指定像素的所有样本。如果坐标不在边界内,则可能会抛出 ArrayIndexOutOfBoundsException。
      重写:
      getPixel 在类 ComponentSampleModel
      参数:
      x - 像素位置的X坐标
      y - 像素位置的Y坐标
      iArray - 如果非空,则返回此数组中的样本
      data - 包含图像数据的 DataBuffer
      返回:
      指定像素的样本。
      参见:
    • getPixels

      public int[] getPixels(int x, int y, int w, int h, int[] iArray, DataBuffer  data)
      返回 int 数组中指定像素矩形的所有样本,每个数据数组元素一个样本。如果坐标不在边界内,则可能会抛出 ArrayIndexOutOfBoundsException。
      重写:
      getPixels 在类 ComponentSampleModel
      参数:
      x - 左上角像素位置的X坐标
      y - 左上角像素位置的 Y 坐标
      w - 像素矩形的宽度
      h - 像素矩形的高度
      iArray - 如果非空,则返回此数组中的样本
      data - 包含图像数据的 DataBuffer
      返回:
      指定区域内像素的样本。
      参见:
    • getSample

      public int getSample(int x, int y, int b, DataBuffer  data)
      以 int 形式返回位于 (x,y) 处像素的指定波段中的样本。如果坐标不在边界内,则可能会抛出 ArrayIndexOutOfBoundsException。
      重写:
      getSample 在类 ComponentSampleModel
      参数:
      x - 像素位置的X坐标
      y - 像素位置的Y坐标
      b - 乐队回归
      data - 包含图像数据的 DataBuffer
      返回:
      指定像素的指定波段中的样本。
      参见:
    • getSampleFloat

      public float getSampleFloat(int x, int y, int b, DataBuffer  data)
      将位于 (x,y) 处的像素的指定波段中的样本作为浮点数返回。如果坐标不在边界内,则可能会抛出 ArrayIndexOutOfBoundsException。
      重写:
      getSampleFloat 在类 ComponentSampleModel
      参数:
      x - 像素位置的X坐标
      y - 像素位置的Y坐标
      b - 乐队回归
      data - 包含图像数据的 DataBuffer
      返回:
      一个浮点值,表示指定像素的指定波段中的样本。
    • getSampleDouble

      public double getSampleDouble(int x, int y, int b, DataBuffer  data)
      将位于 (x,y) 处的像素的指定波段中的样本作为双精度值返回。如果坐标不在边界内,则可能会抛出 ArrayIndexOutOfBoundsException。
      重写:
      getSampleDouble 在类 ComponentSampleModel
      参数:
      x - 像素位置的X坐标
      y - 像素位置的Y坐标
      b - 乐队回归
      data - 包含图像数据的 DataBuffer
      返回:
      一个 double 值,表示指定像素的指定波段中的样本。
    • getSamples

      public int[] getSamples(int x, int y, int w, int h, int b, int[] iArray, DataBuffer  data)
      返回 int 数组中指定像素矩形的指定波段中的样本,每个数据数组元素一个样本。如果坐标不在边界内,则可能会抛出 ArrayIndexOutOfBoundsException。
      重写:
      getSamples 在类 ComponentSampleModel
      参数:
      x - 左上角像素位置的X坐标
      y - 左上角像素位置的 Y 坐标
      w - 像素矩形的宽度
      h - 像素矩形的高度
      b - 乐队回归
      iArray - 如果非空,则返回此数组中的样本
      data - 包含图像数据的 DataBuffer
      返回:
      指定区域内像素的指定波段中的样本。
      参见:
    • setDataElements

      public void setDataElements(int x, int y, Object  obj, DataBuffer  data)
      从类型为 TransferType 的基本数组设置指定 DataBuffer 中单个像素的数据。对于 BandedSampleModel,这将与数据类型相同,并且每个数组元素传输一个样本。

      以下代码说明了将一个像素的数据从 DataBuffer db1 传输到 DataBuffer db2,其存储布局由 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 具有相同数量的波段,相应的波段具有相同的每个样本位数,并且 TransferTypes 相同,则使用 getDataElements/setDataElements 在两个 DataBuffer/SampleModel 对之间传输是合法的。

      obj 必须是 TransferType 类型的原始数组。否则,将抛出 ClassCastException。如果坐标不在边界内,或者如果 obj 不足以容纳像素数据,则可能会抛出 ArrayIndexOutOfBoundsException。

      重写:
      setDataElements 在类 ComponentSampleModel
      参数:
      x - 像素位置的X坐标
      y - 像素位置的Y坐标
      obj - 如果非空,则返回此对象中的原始数组
      data - 包含图像数据的 DataBuffer
      参见:
    • setPixel

      public void setPixel(int x, int y, int[] iArray, DataBuffer  data)
      使用输入样本的 int 数组设置 DataBuffer 中的像素。如果坐标不在边界内,则可能会抛出 ArrayIndexOutOfBoundsException。
      重写:
      setPixel 在类 ComponentSampleModel
      参数:
      x - 像素位置的X坐标
      y - 像素位置的Y坐标
      iArray - int 数组中的输入样本
      data - 包含图像数据的 DataBuffer
      参见:
    • setPixels

      public void setPixels(int x, int y, int w, int h, int[] iArray, DataBuffer  data)
      从每个数组元素包含一个样本的 int 数组中设置像素矩形的所有样本。如果坐标不在边界内,则可能会抛出 ArrayIndexOutOfBoundsException。
      重写:
      setPixels 在类 ComponentSampleModel
      参数:
      x - 左上角像素位置的X坐标
      y - 左上角像素位置的 Y 坐标
      w - 像素矩形的宽度
      h - 像素矩形的高度
      iArray - int 数组中的输入样本
      data - 包含图像数据的 DataBuffer
      参见:
    • setSample

      public void setSample(int x, int y, int b, int s, DataBuffer  data)
      使用 int 输入为 DataBuffer 中位于 (x,y) 的像素设置指定波段中的样本。如果坐标不在边界内,则可能会抛出 ArrayIndexOutOfBoundsException。
      重写:
      setSample 在类 ComponentSampleModel
      参数:
      x - 像素位置的X坐标
      y - 像素位置的Y坐标
      b - 要设置的频段
      s - 作为 int 的输入样本
      data - 包含图像数据的 DataBuffer
      参见:
    • setSample

      public void setSample(int x, int y, int b, float s, DataBuffer  data)
      使用浮点输入为 DataBuffer 中位于 (x,y) 处的像素设置指定波段中的样本。如果坐标不在边界内,则可能会抛出 ArrayIndexOutOfBoundsException。
      重写:
      setSample 在类 ComponentSampleModel
      参数:
      x - 像素位置的X坐标
      y - 像素位置的Y坐标
      b - 要设置的频段
      s - 输入样本为浮点数
      data - 包含图像数据的 DataBuffer
      参见:
    • setSample

      public void setSample(int x, int y, int b, double s, DataBuffer  data)
      使用双精度输入为 DataBuffer 中位于 (x,y) 处的像素设置指定波段中的样本。如果坐标不在边界内,则可能会抛出 ArrayIndexOutOfBoundsException。
      重写:
      setSample 在类 ComponentSampleModel
      参数:
      x - 像素位置的X坐标
      y - 像素位置的Y坐标
      b - 要设置的频段
      s - 输入样本为双精度
      data - 包含图像数据的 DataBuffer
      参见:
    • setSamples

      public void setSamples(int x, int y, int w, int h, int b, int[] iArray, DataBuffer  data)
      从每个数据数组元素包含一个样本的 int 数组中为指定的像素矩形设置指定波段中的样本。如果坐标不在边界内,则可能会抛出 ArrayIndexOutOfBoundsException。
      重写:
      setSamples 在类 ComponentSampleModel
      参数:
      x - 左上角像素位置的X坐标
      y - 左上角像素位置的 Y 坐标
      w - 像素矩形的宽度
      h - 像素矩形的高度
      b - 要设置的频段
      iArray - 输入样本数组
      data - 包含图像数据的 DataBuffer
      参见: