Module java.desktop
Package java.awt.image

Class ComponentSampleModel

java.lang.Object
java.awt.image.SampleModel
java.awt.image.ComponentSampleModel
直接已知的子类:
BandedSampleModel, PixelInterleavedSampleModel

public class ComponentSampleModel extends SampleModel
该类表示存储图像数据的方式,使得每个像素的每个样本占据DataBuffer的一个数据元素。它将构成像素的N个样本存储在N个单独的数据数组元素中。不同波段可以位于DataBuffer的不同bank中。提供了访问器方法,以便直接操作图像数据。该类可以支持不同类型的交错,例如波段交错、扫描线交错和像素交错。像素步幅是同一波段同一扫描线上两个样本之间的数据数组元素数量。扫描线步幅是给定样本与下一个扫描线同一列中相应样本之间的数据数组元素数量。波段偏移表示从DataBuffer的每个波段的第一个数据数组元素到波段的第一个样本的数据数组元素数量。波段从0到N-1编号。该类可以表示每个样本为无符号整数,可以存储在8、16或32位中(分别使用DataBuffer.TYPE_BYTE、DataBuffer.TYPE_USHORT或DataBuffer.TYPE_INT),每个样本为有符号整数,可以存储在16位中(使用DataBuffer.TYPE_SHORT),或每个样本为有符号浮点数或双精度量(分别使用DataBuffer.TYPE_FLOAT或DataBuffer.TYPE_DOUBLE)。给定ComponentSampleModel的所有样本都以相同的精度存储。所有步幅和偏移必须是非负的。该类支持TYPE_BYTE、TYPE_USHORT、TYPE_SHORT、TYPE_INT、TYPE_FLOAT、TYPE_DOUBLE。
参见:
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected int[]
    所有波段的数据数组元素偏移量。
    protected int[]
    存储图像数据波段的每个bank的索引。
    protected int
    这个ComponentSampleModel中的波段数。
    protected int
    这个ComponentSampleModel中的bank数。
    protected int
    由该ComponentSampleModel描述的图像数据区域的像素步幅(数据数组元素)。
    protected int
    由该ComponentSampleModel描述的图像数据区域的行步幅(数据数组元素)。

    Fields declared in class java.awt.image.SampleModel

    dataType, height, width
  • Constructor Summary

    Constructors
    Constructor
    Description
    ComponentSampleModel(int dataType, int w, int h, int pixelStride, int scanlineStride, int[] bandOffsets)
    使用指定的参数构造ComponentSampleModel。
    ComponentSampleModel(int dataType, int w, int h, int pixelStride, int scanlineStride, int[] bankIndices, int[] bandOffsets)
    使用指定的参数构造ComponentSampleModel。
  • Method Summary

    Modifier and Type
    Method
    Description
    createCompatibleSampleModel(int w, int h)
    创建一个具有指定宽度和高度的新ComponentSampleModel。
    创建与此ComponentSampleModel对应的DataBuffer。
    createSubsetSampleModel(int[] bands)
    使用此ComponentSampleModel的部分波段创建一个新的ComponentSampleModel。
    final int[]
    返回所有波段的波段偏移量。
    final int[]
    返回所有波段的bank索引。
    getDataElements(int x, int y, Object obj, DataBuffer data)
    返回类型为TransferType的原始数组中单个像素的数据。
    final int
    返回使用getDataElements(int, int, Object, DataBuffer)和setDataElements(int, int, Object, DataBuffer)方法传输像素所需的数据元素数量。
    int
    getOffset(int x, int y)
    获取像素(x,y)的第一个波段的偏移量。
    int
    getOffset(int x, int y, int b)
    获取像素(x,y)的第b个波段的偏移量。
    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数组中指定像素矩形的所有样本,每个数组元素一个样本。
    final int
    返回此ComponentSampleModel的像素步幅。
    int
    getSample(int x, int y, int b, DataBuffer data)
    返回位于(x,y)处像素的指定波段的样本作为int。
    double
    getSampleDouble(int x, int y, int b, DataBuffer data)
    返回位于(x,y)处像素的指定波段的样本作为double。
    float
    getSampleFloat(int x, int y, int b, DataBuffer data)
    返回位于(x,y)处像素的指定波段的样本作为float。
    int[]
    getSamples(int x, int y, int w, int h, int b, int[] iArray, DataBuffer data)
    返回int数组中指定像素矩形的指定波段的所有样本,每个数据数组元素一个样本。
    final int[]
    返回所有波段的每个样本的位数。
    final int
    getSampleSize(int band)
    返回指定波段的每个样本的位数。
    final int
    返回此ComponentSampleModel的扫描线步幅。
    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, double s, DataBuffer data)
    使用double设置DataBuffer中(x,y)处指定波段的像素的样本。
    void
    setSample(int x, int y, int b, float s, DataBuffer data)
    使用float设置DataBuffer中(x,y)处指定波段的像素的样本。
    void
    setSample(int x, int y, int b, int s, DataBuffer data)
    使用int设置DataBuffer中(x,y)处指定波段的像素的样本。
    void
    setSamples(int x, int y, int w, int h, int b, int[] iArray, DataBuffer data)
    从包含每个数据数组元素一个样本的int数组设置指定像素矩形的指定波段的所有样本。

    Methods declared in class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • bandOffsets

      protected int[] bandOffsets
      所有波段的数据数组元素偏移量。
    • bankIndices

      protected int[] bankIndices
      存储图像数据波段的每个bank的索引。
    • numBands

      protected int numBands
      这个ComponentSampleModel中的波段数。
    • numBanks

      protected int numBanks
      这个ComponentSampleModel中的bank数。
    • scanlineStride

      protected int scanlineStride
      由该ComponentSampleModel描述的图像数据区域的行步幅(数据数组元素)。
    • pixelStride

      protected int pixelStride
      由该ComponentSampleModel描述的图像数据区域的像素步幅(数据数组元素)。
  • Constructor Details

    • ComponentSampleModel

      public ComponentSampleModel(int dataType, int w, int h, int pixelStride, int scanlineStride, int[] bandOffsets)
      使用指定的参数构造ComponentSampleModel。波段数将由bandOffsets数组的长度给出。所有波段将存储在DataBuffer的第一个bank中。
      参数:
      dataType - 存储样本的数据类型
      w - 描述图像数据区域的宽度(以像素为单位)
      h - 描述图像数据区域的高度(以像素为单位)
      pixelStride - 描述图像数据区域的像素步幅
      scanlineStride - 描述图像数据区域的行步幅
      bandOffsets - 所有波段的偏移量
      抛出:
      IllegalArgumentException - 如果wh都不大于0
      IllegalArgumentException - 如果wh的乘积大于Integer.MAX_VALUE
      IllegalArgumentException - 如果pixelStride小于0
      IllegalArgumentException - 如果scanlineStride小于0
      NullPointerException - 如果bandOffsetsnull
      IllegalArgumentException - 如果bandOffsets.length为0
      IllegalArgumentException - 如果dataType不是此样本模型支持的数据类型之一。
    • ComponentSampleModel

      public ComponentSampleModel(int dataType, int w, int h, int pixelStride, int scanlineStride, int[] bankIndices, int[] bandOffsets)
      使用指定的参数构造ComponentSampleModel。波段数将由bandOffsets数组的长度给出。不同波段可以存储在DataBuffer的不同bank中。
      参数:
      dataType - 用于存储样本的数据类型
      w - 描述图像数据区域的宽度(以像素为单位)
      h - 描述图像数据区域的高度(以像素为单位)
      pixelStride - 描述图像数据区域的像素跨距
      scanlineStride - 描述图像数据区域的扫描线跨距
      bankIndices - 所有波段的银行索引
      bandOffsets - 所有波段的波段偏移
      抛出:
      IllegalArgumentException - 如果wh都不大于0
      IllegalArgumentException - 如果wh的乘积大于Integer.MAX_VALUE
      IllegalArgumentException - 如果pixelStride小于0
      IllegalArgumentException - 如果scanlineStride小于0
      NullPointerException - 如果bankIndicesnull
      NullPointerException - 如果bandOffsetsnull
      IllegalArgumentException - 如果bandOffsets.length为0
      IllegalArgumentException - 如果bankIndices的长度与bandOffsets的长度不相等
      IllegalArgumentException - 如果dataType不是此样本模型支持的数据类型之一
  • Method Details

    • createCompatibleSampleModel

      public SampleModel createCompatibleSampleModel(int w, int h)
      创建一个具有指定宽度和高度的新ComponentSampleModel。新的SampleModel将具有与此SampleModel相同的波段数、存储数据类型、交错方案和像素跨距。
      指定者:
      createCompatibleSampleModel 在类 SampleModel
      参数:
      w - 结果SampleModel的宽度
      h - 结果SampleModel的高度
      返回:
      一个具有指定大小的新ComponentSampleModel
      抛出:
      IllegalArgumentException - 如果wh不大于0
    • createSubsetSampleModel

      public SampleModel createSubsetSampleModel(int[] bands)
      使用此ComponentSampleModel的一部分创建一个新的ComponentSampleModel。新的ComponentSampleModel可以与现有的ComponentSampleModel可用的任何DataBuffer一起使用。新的ComponentSampleModel/DataBuffer组合将表示具有原始ComponentSampleModel/DataBuffer组合的波段子集的图像。
      指定者:
      createSubsetSampleModel 在类 SampleModel
      参数:
      bands - 来自此ComponentSampleModel的波段子集
      返回:
      使用此ComponentSampleModel的波段子集创建的ComponentSampleModel
    • createDataBuffer

      public DataBuffer createDataBuffer()
      创建与此ComponentSampleModel对应的DataBuffer。DataBuffer对象的数据类型、银行数和大小与此ComponentSampleModel一致。
      指定者:
      createDataBuffer 在类 SampleModel
      返回:
      一个DataBuffer,其数据类型、银行数和大小与此ComponentSampleModel一致。
    • getOffset

      public int getOffset(int x, int y)
      获取像素(x,y)的第一个波段的偏移量。可以使用DataBuffer dataComponentSampleModel csm从中检索第一个波段的样本
              data.getElem(csm.getOffset(x, y));
       
      参数:
      x - 像素的X位置
      y - 像素的Y位置
      返回:
      指定像素的第一个波段的偏移量。
    • getOffset

      public int getOffset(int x, int y, int b)
      获取像素(x,y)的第b个波段的偏移量。可以使用DataBuffer dataComponentSampleModel csm从中检索波段b的样本
             data.getElem(csm.getOffset(x, y, b));
       
      参数:
      x - 指定像素的X位置
      y - 指定像素的Y位置
      b - 指定的波段
      返回:
      指定像素的指定波段的偏移量。
    • getSampleSize

      public final int[] getSampleSize()
      返回所有波段的每个样本的位数。
      指定者:
      getSampleSize 在类 SampleModel
      返回:
      包含所有波段每个样本的位数的数组,数组中的每个元素表示一个波段。
    • getSampleSize

      public final int getSampleSize(int band)
      返回指定波段的每个样本的位数。
      指定者:
      getSampleSize 在类 SampleModel
      参数:
      band - 指定的波段
      返回:
      指定波段的每个样本的位数。
    • getBankIndices

      public final int[] getBankIndices()
      返回所有波段的银行索引。
      返回:
      所有波段的银行索引。
    • getBandOffsets

      public final int[] getBandOffsets()
      返回所有波段的波段偏移。
      返回:
      所有波段的波段偏移。
    • getScanlineStride

      public final int getScanlineStride()
      返回此ComponentSampleModel的扫描线跨距。
      返回:
      ComponentSampleModel的扫描线跨距。
    • getPixelStride

      public final int getPixelStride()
      返回此ComponentSampleModel的像素跨距。
      返回:
      ComponentSampleModel的像素跨距。
    • getNumDataElements

      public final int getNumDataElements()
      返回使用getDataElements(int, int, Object, DataBuffer)setDataElements(int, int, Object, DataBuffer)方法传输像素所需的数据元素数。对于ComponentSampleModel,这与波段数相同。
      指定者:
      getNumDataElements 在类 SampleModel
      返回:
      使用getDataElementssetDataElements方法传输像素所需的数据元素数。
      参见:
    • getDataElements

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

      以下代码示例说明了从由ComponentSampleModel csm1描述的存储布局的DataBuffer db1向由ComponentSampleModel csm2描述的存储布局的DataBuffer db2传输一个像素的数据。传输通常比使用getPixelsetPixel更有效。

             ComponentSampleModel csm1, csm2;
             DataBufferInt db1, db2;
             csm2.setDataElements(x, y,
                                  csm1.getDataElements(x, y, null, db1), db2);
       
      如果obj不为null,则它应为TransferType类型的原始数组。否则,将抛出ClassCastException。如果坐标不在范围内,或者obj不为null且不足以容纳像素数据,则可能会抛出ArrayIndexOutOfBoundsException
      指定者:
      getDataElements 在类 SampleModel
      参数:
      x - 像素位置的X坐标
      y - 像素位置的Y坐标
      obj - 如果非null,则返回像素数据的原始数组
      data - 包含图像数据的DataBuffer
      返回值:
      指定像素的数据
      抛出:
      NullPointerException - 如果数据为null。
      ArrayIndexOutOfBoundsException - 如果坐标超出范围,或者obj太小无法容纳输出。
      参见:
    • getPixel

      public int[] getPixel(int x, int y, int[] iArray, DataBuffer data)
      返回一个int数组中指定像素的所有样本,每个数组元素一个样本。如果坐标超出范围,可能会抛出ArrayIndexOutOfBoundsException
      覆盖:
      getPixel 在类 SampleModel
      参数:
      x - 像素位置的X坐标
      y - 像素位置的Y坐标
      iArray - 如果非null,则将样本返回到此数组中
      data - 包含图像数据的DataBuffer
      返回值:
      指定像素的样本
      抛出:
      NullPointerException - 如果数据为null。
      ArrayIndexOutOfBoundsException - 如果坐标超出范围,或者iArray太小无法容纳输出。
      参见:
    • getPixels

      public int[] getPixels(int x, int y, int w, int h, int[] iArray, DataBuffer data)
      返回一个int数组中指定像素矩形的所有样本,每个数组元素一个样本。如果坐标超出范围,可能会抛出ArrayIndexOutOfBoundsException
      覆盖:
      getPixels 在类 SampleModel
      参数:
      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 在类 SampleModel
      参数:
      x - 像素位置的X坐标
      y - 像素位置的Y坐标
      b - 要返回的波段
      data - 包含图像数据的DataBuffer
      返回值:
      指定像素的指定波段中的样本
      参见:
    • getSampleFloat

      public float getSampleFloat(int x, int y, int b, DataBuffer data)
      返回位于(x,y)处像素的指定波段中的样本作为float。如果坐标超出范围,可能会抛出ArrayIndexOutOfBoundsException
      覆盖:
      getSampleFloat 在类 SampleModel
      参数:
      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 在类 SampleModel
      参数:
      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 在类 SampleModel
      参数:
      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中单个像素的数据。对于ComponentSampleModel,这与数据类型相同,每个数组元素传输一个样本。

      以下代码示例说明了从DataBuffer db1传输一个像素的数据,其存储布局由ComponentSampleModel csm1描述,到DataBuffer db2,其存储布局由ComponentSampleModel csm2描述。与使用getPixelsetPixel相比,传输通常更有效。

             ComponentSampleModel csm1, csm2;
             DataBufferInt db1, db2;
             csm2.setDataElements(x, y, csm1.getDataElements(x, y, null, db1),
                                  db2);
       
      如果obj不是类型为TransferType的原始数组,则会抛出ClassCastException。如果坐标超出范围,或者obj不足以容纳像素数据,则可能会抛出ArrayIndexOutOfBoundsException
      指定者:
      setDataElements 在类 SampleModel
      参数:
      x - 像素位置的X坐标
      y - 像素位置的Y坐标
      obj - 包含像素数据的原始数组
      data - 包含图像数据的DataBuffer
      参见:
    • setPixel

      public void setPixel(int x, int y, int[] iArray, DataBuffer data)
      使用样本数组设置DataBuffer中的像素。如果坐标超出范围,可能会抛出ArrayIndexOutOfBoundsException
      覆盖:
      setPixel 在类 SampleModel
      参数:
      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 在类 SampleModel
      参数:
      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 在类 SampleModel
      参数:
      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 在类 SampleModel
      参数:
      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 在类 SampleModel
      参数:
      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 在类 SampleModel
      参数:
      x - 左上角像素位置的X坐标
      y - 左上角像素位置的Y坐标
      w - 像素矩形的宽度
      h - 像素矩形的高度
      b - 要设置的带
      iArray - 一个int数组中的输入样本
      data - 包含图像数据的DataBuffer
      参见: