Module java.desktop
Package java.awt.image

Class BandedSampleModel


public final class BandedSampleModel extends ComponentSampleModel
这个类表示以带交错方式存储的图像数据,每个像素的每个样本占据DataBuffer的一个数据元素。它是ComponentSampleModel的子类,但提供了一个更有效的实现来访问带交错图像数据,而不是ComponentSampleModel提供的。在处理将每个波段的样本数据存储在DataBuffer的不同bank中的图像时,通常应使用此类。提供了访问器方法,以便直接操作图像数据。像素步幅是同一扫描线上同一波段的两个样本之间的数据数组元素数量。BandedSampleModel的像素步幅为1。扫描线步幅是给定样本与下一个扫描线同一列中相应样本之间的数据数组元素数量。波段偏移量表示从DataBuffer的每个波段的第一个数据数组元素到波段的第一个样本的数据数组元素数量。波段从0到N-1编号。银行索引表示数据缓冲区的一个银行与图像数据的一个波段之间的对应关系。此类支持TYPE_BYTETYPE_USHORTTYPE_SHORTTYPE_INTTYPE_FLOATTYPE_DOUBLE数据类型
  • Constructor Details

    • 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不是此样本模型支持的数据类型之一
  • Method Details

    • 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的数据类型、银行数量和大小将与此BandedSampleModel保持一致。
      覆盖:
      createDataBuffer 在类 ComponentSampleModel
      返回:
      一个DataBuffer,其数据类型、存储单元数量和大小与此ComponentSampleModel一致。
      抛出:
      IllegalArgumentException - 如果dataType不是受支持的类型之一。
    • getDataElements

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

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

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

      如果obj非null,则它应该是TransferType类型的原始数组。否则,将抛出ClassCastException。如果坐标不在范围内,或者obj不足以容纳像素数据,则可能会抛出ArrayIndexOutOfBoundsException。

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

      public int[] getPixel(int x, int y, int[] iArray, DataBuffer data)
      返回一个int数组中指定像素的所有样本。如果坐标不在范围内,则可能会抛出ArrayIndexOutOfBoundsException。
      覆盖:
      getPixel 在类 ComponentSampleModel
      参数:
      x - 像素位置的X坐标
      y - 像素位置的Y坐标
      iArray - 如果非null,则将样本返回到此数组中
      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 - 如果非null,则将样本返回到此数组中
      data - 包含图像数据的DataBuffer
      返回:
      指定区域内像素的样本。
      参见:
    • getSample

      public int getSample(int x, int y, int b, DataBuffer data)
      返回位于(x,y)处像素的指定波段的样本作为int。如果坐标不在范围内,则可能会抛出ArrayIndexOutOfBoundsException。
      覆盖:
      getSample 在类 ComponentSampleModel
      参数:
      x - 像素位置的X坐标
      y - 像素位置的Y坐标
      b - 要返回的波段
      data - 包含图像数据的DataBuffer
      返回:
      指定像素的指定波段的样本。
      参见:
    • getSampleFloat

      public float getSampleFloat(int x, int y, int b, DataBuffer data)
      返回位于(x,y)处像素的指定波段的样本作为float。如果坐标不在范围内,则可能会抛出ArrayIndexOutOfBoundsException。
      覆盖:
      getSampleFloat 在类 ComponentSampleModel
      参数:
      x - 像素位置的X坐标
      y - 像素位置的Y坐标
      b - 要返回的波段
      data - 包含图像数据的DataBuffer
      返回:
      代表指定像素的指定波段的样本的float值。
    • getSampleDouble

      public double getSampleDouble(int x, int y, int b, DataBuffer data)
      返回位于(x,y)处像素的指定波段的样本作为double。如果坐标不在范围内,则可能会抛出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 - 如果非null,则将样本返回到此数组中
      data - 包含图像数据的DataBuffer
      返回:
      指定区域内像素的指定波段的样本。
      参见:
    • setDataElements

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

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

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

      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)
      使用float输入,在DataBuffer中为位于(x,y)处的像素的指定波段设置样本。如果坐标超出范围,可能会抛出ArrayIndexOutOfBoundsException。
      覆盖:
      setSample 在类 ComponentSampleModel
      参数:
      x - 像素位置的X坐标
      y - 像素位置的Y坐标
      b - 要设置的波段
      s - 作为float的输入样本
      data - 包含图像数据的DataBuffer
      参见:
    • setSample

      public void setSample(int x, int y, int b, double s, DataBuffer data)
      使用double输入,在DataBuffer中为位于(x,y)处的像素的指定波段设置样本。如果坐标超出范围,可能会抛出ArrayIndexOutOfBoundsException。
      覆盖:
      setSample 在类 ComponentSampleModel
      参数:
      x - 像素位置的X坐标
      y - 像素位置的Y坐标
      b - 要设置的波段
      s - 作为double的输入样本
      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
      参见: