模块  java.desktop
软件包  java.awt.image

Class ComponentSampleModel

  • 已知直接子类:
    BandedSampleModelPixelInterleavedSampleModel

    public class ComponentSampleModel
    extends SampleModel
    该类表示存储的图像数据,使得像素的每个样本占据DataBuffer的一个数据元素。 它存储构成N个独立数据阵列元素中的像素的N个样本。 不同的波段可能位于DataBuffer的不同库中。 提供了访问器方法,以便可以直接操作图像数据。 该类可以支持不同种类的交织,例如频带交织,扫描线交织和像素交织。 像素跨度是同一扫描线上相同频带的两个样本之间的数据阵列元素的数量。 扫描线步幅是给定样本与下一扫描线的同一列中的相应样本之间的数据阵列元素的数量。 频带偏移表示从将每个频带保持到频带的第一个采样的DataBuffer的存储体的第一个数据数组元素中的数据数组元素的数量。 频带编号从0到N-1。 这个类可以代表图像数据,其中每个样本是(使用可被存储在8位,16位或32位的无符号整数DataBuffer.TYPE_BYTEDataBuffer.TYPE_USHORT ,或DataBuffer.TYPE_INT ,分别地),数据为每个样本是一个带符号的整数,其可以以16位(使用DataBuffer.TYPE_SHORT )或每个样本为有符号浮点数或双倍数量的数据存储(分别使用DataBuffer.TYPE_FLOATDataBuffer.TYPE_DOUBLE )。 给定ComponentSampleModel的所有样本都以相同的精度存储。 所有步幅和偏移都必须是非负的。 该类支持TYPE_BYTETYPE_USHORTTYPE_SHORTTYPE_INTTYPE_FLOATTYPE_DOUBLE
    另请参见:
    PixelInterleavedSampleModelBandedSampleModel
    • 字段详细信息

      • bandOffsets

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

        protected int[] bankIndices
        存储一系列图像数据的每个银行的索引。
      • numBands

        protected int numBands
        这个 ComponentSampleModel的乐队数量。
      • numBanks

        protected int numBanks
        这个银行的数量在 ComponentSampleModel
      • scanlineStride

        protected int scanlineStride
        此ComponentSampleModel描述的图像数据区域的行跨度(在数据数组元素中)。
      • pixelStride

        protected int pixelStride
        由ComponentSampleModel描述的图像数据区域的像素步幅(在数据阵列元素中)。
    • 构造方法详细信息

      • ComponentSampleModel

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

        public ComponentSampleModel​(int dataType,
                                    int w,
                                    int h,
                                    int pixelStride,
                                    int scanlineStride,
                                    int[] bankIndices,
                                    int[] bandOffsets)
        使用指定的参数构造ComponentSampleModel。 band的数量将由bandOffsets数组的长度给出。 不同的频带可以存储在DataBuffer的不同存储体中。
        参数
        dataType - 用于存储样本的数据类型
        w - 所描述的图像数据区域的宽度(以像素为单位)
        h - 所描述的图像数据区域的高度(以像素为单位)
        pixelStride - 描述的图像数据区域的像素跨度
        scanlineStride - 描述的图像数据区域的行 scanlineStride
        bankIndices - 所有波段的银行指数
        bandOffsets - 所有频段的频段偏移
        异常
        IllegalArgumentException - 如果 wh不大于0
        IllegalArgumentException - 如果 pixelStride小于0
        IllegalArgumentException - 如果 scanlineStride小于0
        IllegalArgumentException - 如果长度 bankIndices不等于 bankOffsets的长度
        IllegalArgumentException -如有的银行指数 bandIndices小于0
        IllegalArgumentException - 如果 dataType不是受支持的数据类型之一
    • 方法详细信息

      • createCompatibleSampleModel

        public SampleModel createCompatibleSampleModel​(int w,
                                                       int h)
        创建具有指定宽度和高度的新ComponentSampleModel SampleModel将具有相同数目的频带,存储数据类型的交织方案,以及像素跨度,因为这SampleModel
        Specified by:
        createCompatibleSampleModel in class SampleModel
        参数
        w - 生成的 SampleModel的宽度
        h - 结果 SampleModel的高度
        结果
        具有指定大小的新 ComponentSampleModel
        异常
        IllegalArgumentException - 如果 wh不大于0
      • createSubsetSampleModel

        public SampleModel createSubsetSampleModel​(int[] bands)
        使用此ComponentSampleModel的band子集创建新的ComponentSampleModel。 新的ComponentSampleModel可以与现有ComponentSampleModel可以使用的任何DataBuffer一起使用。 新的ComponentSampleModel / DataBuffer组合将表示具有原始ComponentSampleModel / DataBuffer组合的波段子集的图像。
        Specified by:
        createSubsetSampleModel类别 SampleModel
        参数
        bands - 此 ComponentSampleModel一个频段子集
        结果
        一个 ComponentSampleModel与乐队从这个子集创建 ComponentSampleModel
      • createDataBuffer

        public DataBuffer createDataBuffer()
        创建一个DataBuffer ,对应于这个ComponentSampleModel DataBuffer对象的数据类型,库数和大小与此ComponentSampleModel一致。
        Specified by:
        createDataBuffer在类 SampleModel
        结果
        DataBuffer其数据类型,银行数量和大小均与此 ComponentSampleModel一致。
      • getOffset

        public int getOffset​(int x,
                             int y)
        获取第一个像素带(x,y)的偏移量。 可以从DataBuffer data获得第一波段的样本,其中ComponentSampleModel csm
          data.getElem(csm.getOffset(x, y)); 
        参数
        x - 像素的X位置
        y - 像素的Y位置
        结果
        指定像素的第一个波段的偏移量。
      • getOffset

        public int getOffset​(int x,
                             int y,
                             int b)
        获取像素(x,y)的band b的偏移量。 可以从DataBuffer data检索带bDataBuffer data ,其中ComponentSampleModel csm
          data.getElem(csm.getOffset(x, y, b)); 
        参数
        x - 指定像素的X位置
        y - 指定像素的Y位置
        b - 指定的乐队
        结果
        指定像素的指定波段的偏移量。
      • getSampleSize

        public final int[] getSampleSize()
        返回所有band的每个样本的位数。
        Specified by:
        getSampleSizeSampleModel
        结果
        一个数组,包含所有波段的每个采样的位数,其中数组中的每个元素代表一个波段。
      • getSampleSize

        public final int getSampleSize​(int band)
        返回指定band的每个样本的位数。
        Specified by:
        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的像素大步。
      • getDataElements

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

        以下代码说明了将一个像素的数据从DataBuffer db1 (其存储布局由ComponentSampleModel csm1描述) ComponentSampleModel csm1DataBuffer db2 ,其存储布局由ComponentSampleModel csm2描述。 转移通常比使用getPixelsetPixel更有效。

          ComponentSampleModel csm1, csm2;
               DataBufferInt db1, db2;
               csm2.setDataElements(x, y,
                                    csm1.getDataElements(x, y, null, db1), db2); 
        如果SampleModel对象具有相同的频带数,则使用getDataElementssetDataElements在两个DataBuffer/SampleModel对之间进行传输是合法的,相应的频带每个样本具有相同的位数,并且TransferType是相同的。

        如果obj不是null ,则它应该是类型为TransferType的基本数组。 否则,抛出ClassCastException 一个ArrayIndexOutOfBoundsException如果坐标不在边界可能被抛出,或者如果obj不是null并没有大到足以容纳像素数据。

        Specified by:
        getDataElementsSampleModel
        参数
        x - 像素位置的X坐标
        y - 像素位置的Y坐标
        obj - 如果 null ,则返回像素数据的基本数组
        data - 包含图像数据的 DataBuffer
        结果
        指定像素的数据
        异常
        NullPointerException - 如果数据为空。
        ArrayIndexOutOfBoundsException - 如果坐标不在边界内,或者obj太小而无法保持输出。
        另请参见:
        setDataElements(int, int, Object, DataBuffer)
      • 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 - 如果数据为空。
        ArrayIndexOutOfBoundsException - 如果坐标不在边界内,或者iArray太小而无法保持输出。
        另请参见:
        setPixel(int, int, int[], DataBuffer)
      • 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
        结果
        指定区域内像素的样本。
        另请参见:
        setPixels(int, int, int, int, int[], DataBuffer)
      • getSample

        public int getSample​(int x,
                             int y,
                             int b,
                             DataBuffer data)
        对于位于(x,y)的像素,在指定band中的样本返回int。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException
        Specified by:
        getSample在类 SampleModel
        参数
        x - 像素位置的X坐标
        y - 像素位置的Y坐标
        b - 乐队返回
        data - 包含图像数据的 DataBuffer
        结果
        指定像素中指定像素的样本
        另请参见:
        setSample(int, int, int, int, DataBuffer)
      • getSampleFloat

        public float getSampleFloat​(int x,
                                    int y,
                                    int b,
                                    DataBuffer data)
        将位于(x,y)的像素的指定band中的样本返回为float。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException
        重写:
        getSampleFloat在类 SampleModel
        参数
        x - 像素位置的X坐标
        y - 像素位置的Y坐标
        b - 乐队返回
        data - 包含图像数据的DataBuffer
        结果
        一个浮点值,表示指定像素中指定像素的样本。
      • 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数组中指定矩形像素的指定band中的样本,每个数据数组元素一个样本。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException
        重写:
        getSamplesSampleModel
        参数
        x - 左上角像素位置的X坐标
        y - 左上角像素位置的Y坐标
        w - 像素矩形的宽度
        h - 像素矩形的高度
        b - 乐队返回
        iArray - 如果非 null ,则返回此数组中的样本
        data - 包含图像数据的 DataBuffer
        结果
        指定像素的指定波段中的样本
        另请参见:
        setSamples(int, int, int, int, int, int[], DataBuffer)
      • setDataElements

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

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

          ComponentSampleModel csm1, csm2;
               DataBufferInt db1, db2;
               csm2.setDataElements(x, y, csm1.getDataElements(x, y, null, db1),
                                    db2); 
        如果SampleModel对象具有相同数量的波段,相应的波段每个采样具有相同的比特数,并且TransferType是相同的,则使用getDataElementssetDataElements在两个DataBuffer/SampleModel对之间进行传输是合法的。

        ClassCastException如果被抛出obj不是类型的基本数组TransferType 一个ArrayIndexOutOfBoundsException如果坐标不在边界可能被抛出,或者如果obj不够大,无法容纳像素数据。

        Specified by:
        setDataElements在课程 SampleModel
        参数
        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
        重写:
        setPixel在类 SampleModel
        参数
        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
        重写:
        setPixels在类 SampleModel
        参数
        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作为输入,为DataBuffer位于(x,y)的像素设置指定波段中的样本。 如果坐标不在边界内,则可能会抛出ArrayIndexOutOfBoundsException
        Specified by:
        setSampleSampleModel
        参数
        x - 像素位置的X坐标
        y - 像素位置的Y坐标
        b - 要设置的乐队
        s - 输入样本为int
        data - 包含图像数据的DataBuffer
        另请参见:
        getSample(int, int, int, DataBuffer)
      • setSample

        public void setSample​(int x,
                              int y,
                              int b,
                              float s,
                              DataBuffer data)
        使用浮点输入为DataBuffer位于(x,y)的像素设置指定波段的样本。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException
        重写:
        setSampleSampleModel
        参数
        x - 像素位置的X坐标
        y - 像素位置的Y坐标
        b - 要设置的乐队
        s - 输入样本为浮点数
        data - 包含图像数据的DataBuffer
        另请参见:
        getSample(int, int, int, 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
        另请参见:
        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
        重写:
        setSamples在类 SampleModel
        参数
        x - 左上角像素位置的X坐标
        y - 左上角像素位置的Y坐标
        w - 像素矩形的宽度
        h - 像素矩形的高度
        b - 要设置的乐队
        iArray - int数组中的输入样本
        data - 包含图像数据的DataBuffer
        另请参见:
        getSamples(int, int, int, int, int, int[], DataBuffer)