Module  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。 带宽的数量将由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。 带宽的数量将由bandOffsets数组的长度给出。 不同的频段可能存储在DataBuffer的不同组中。
        参数
        dataType - 存储样本的数据类型
        w - 描述的图像数据区域的宽度(以像素为单位)
        h - 描述的图像数据区域的高度(以像素为单位)
        pixelStride - 描述的图像数据区域的像素步幅
        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:
        createCompatibleSampleModelSampleModel
        参数
        w - 所得的宽度 SampleModel
        h - 由此产生的高度 SampleModel
        结果
        一个新的 ComponentSampleModel具有指定的大小
        异常
        IllegalArgumentException - 如果 wh不大于0
      • createSubsetSampleModel

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

        public DataBuffer createDataBuffer​()
        创建一个DataBuffer对应于这个ComponentSampleModel DataBuffer对象的数据类型,银行数量和大小与此ComponentSampleModel一致。
        Specified by:
        createDataBufferSampleModel
        结果
        一个 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)的带b的偏移。 带的样品b可以从被检索DataBuffer dataComponentSampleModel csm作为
          data.getElem(csm.getOffset(x, y, b)); 
        参数
        x - 指定像素的X位置
        y - 指定像素的Y位置
        b - 指定的乐队
        结果
        指定像素的指定波段的偏移量。
      • getSampleSize

        public final int[] getSampleSize​()
        返回所有频带的每个样本的位数。
        Specified by:
        getSampleSizeSampleModel
        结果
        一个数组,其中包含所有带的每个样本的位数,其中阵列中的每个元素表示一个带。
      • getSampleSize

        public final int getSampleSize​(int band)
        返回指定频带的每个样本的位数。
        Specified by:
        getSampleSizeSampleModel
        参数
        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 csm1一个像素的数据传输到DataBuffer db2 ,其存储布局由ComponentSampleModel csm2描述。 转移通常比使用getPixelsetPixel更有效。

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

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

        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
        重写:
        getPixelSampleModel
        参数
        x - 像素位置的X坐标
        y - 像素位置的Y坐标
        iArray - 如果非空,则返回此数组中的样本
        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
        重写:
        getPixelsSampleModel
        参数
        x - 左上角像素位置的X坐标
        y - 左上角像素位置的Y坐标
        w - 像素矩形的宽度
        h - 像素矩形的高度
        iArray - 如果非空,则返回此数组中的样本
        data - 包含图像数据的DataBuffer
        结果
        指定区域内像素的样本。
        另请参见:
        setPixels(int, int, int, int, int[], DataBuffer)
      • getSample

        public int getSample​(int x,
                             int y,
                             int b,
                             DataBuffer data)
        返回为位于(x,y)处的像素的指定带中的样本int。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException
        Specified by:
        getSampleSampleModel
        参数
        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)处的像素的指定带中的样本作为浮点返回。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException
        重写:
        getSampleFloatSampleModel
        参数
        x - 像素位置的X坐标
        y - 像素位置的Y坐标
        b - 乐队返回
        data - 包含图像数据的DataBuffer
        结果
        表示指定像素的指定频带中的样本的浮点值。
      • getSampleDouble

        public double getSampleDouble​(int x,
                                      int y,
                                      int b,
                                      DataBuffer data)
        将位于(x,y)的像素的指定带中的样本返回为双倍。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException
        重写:
        getSampleDoubleSampleModel
        参数
        x - 像素位置的X坐标
        y - 像素位置的Y坐标
        b - 乐队返回
        data - 包含图像数据的DataBuffer
        结果
        表示指定像素的指定频带中的样本的双重值。
      • getSamples

        public int[] getSamples​(int x,
                                int y,
                                int w,
                                int h,
                                int b,
                                int[] iArray,
                                DataBuffer data)
        返回int数组中指定的像素矩形的指定带中的样本,每个数据数组元素一个样本。 如果坐标不在边界内,则可能抛出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)
        设置在指定的一个单个像素的数据DataBuffer从类型的基本数组TransferType 对于ComponentSampleModel ,这与数据类型相同,每个数组元素都会传送一个样本。

        以下代码说明将DataBuffer db1的存储布局由ComponentSampleModel csm1描述的ComponentSampleModel csm1一个像素的数据传输到DataBuffer 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是相同的。

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

        Specified by:
        setDataElementsSampleModel
        参数
        x - 像素位置的X坐标
        y - 像素位置的Y坐标
        obj - 包含像素数据的原始数组
        data - 包含图像数据的DataBuffer
        另请参见:
        getDataElements(int, int, Object, DataBuffer)
      • setPixel

        public void setPixel​(int x,
                             int y,
                             int[] iArray,
                             DataBuffer data)
        DataBuffer使用int数组的样本设置一个像素进行输入。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException
        重写:
        setPixelSampleModel
        参数
        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
        重写:
        setPixelsSampleModel
        参数
        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)
        DataBuffer使用int作为输入,为位于(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)
        DataBuffer位于(x,y)处的像素的指定波段设置一个样本,使用双倍输入。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException
        重写:
        setSampleSampleModel
        参数
        x - 像素位置的X坐标
        y - 像素位置的Y坐标
        b - 乐队设置
        s - 输入样本为双倍
        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数组中为指定的像素矩形设置样本。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException
        重写:
        setSamplesSampleModel
        参数
        x - 左上角像素位置的X坐标
        y - 左上角像素位置的Y坐标
        w - 像素矩形的宽度
        h - 像素矩形的高度
        b - 乐队设置
        iArray - int数组中的输入样本
        data - 包含图像数据的DataBuffer
        另请参见:
        getSamples(int, int, int, int, int, int[], DataBuffer)
      • equals

        public boolean equals​(Object o)
        描述从类复制: Object
        指示一些其他对象是否等于此。

        equals方法在非空对象引用上实现等价关系:

        • 自反性 :对于任何非空的参考值xx.equals(x)应该返回true
        • 它是对称的 :对于任何非空引用值xyx.equals(y)应该返回true当且仅当y.equals(x)回报true
        • 传递性 :对于任何非空引用值xy ,并z ,如果x.equals(y)回报truey.equals(z)回报true ,然后x.equals(z)应该返回true
        • 一致 :对于任何非空参考值xy ,多重调用x.equals(y)一致返回true或始终返回false ,前提是在equals对象中使用的信息进行修改。
        • 对于任何非空的参考值xx.equals(null)应该返回false

        equals类方法Object实现对象上差别可能性最大的相等关系; 也就是说,对于任何非空参考值xy ,当且仅当xy引用相同对象( x == y具有值true )时,该方法返回true

        请注意,无论何时覆盖此方法,通常需要覆盖hashCode方法,以便维护hashCode方法的通用合同,该方法规定相等的对象必须具有相等的哈希码。

        重写:
        equalsObject
        参数
        o - 与之比较的参考对象。
        结果
        true如果该对象与obj参数相同; 否则为false
        另请参见:
        Object.hashCode()HashMap
      • hashCode

        public int hashCode​()
        描述从类复制: Object
        返回对象的哈希码值。 支持这种方法有利于哈希表,如HashMap提供的那样

        hashCode的总合同是:

        • 只要在执行Java应用程序时多次在同一个对象上调用该对象,则hashCode方法必须始终返回相同的整数,前提是修改了对象中equals比较中的信息。 该整数不需要从一个应用程序的执行到相同应用程序的另一个执行保持一致。
        • 如果根据equals(Object)方法两个对象相等,则在两个对象中的每个对象上调用hashCode方法必须产生相同的整数结果。
        • 要求如果两个对象根据Object.equals(java.lang.Object)方法是不相等的,那么在两个对象中的每个对象上调用hashCode方法必须产生不同的整数结果。 但是,程序员应该意识到,为不等对象生成不同的整数结果可能会提高哈希表的性能。

        尽可能合理实用,由类Object定义的hashCode方法确实为不同对象返回不同的整数。 (在某个时间点,hashCode可能或可能不被实现为对象的存储器地址的某些功能。)

        重写:
        hashCodeObject
        结果
        该对象的哈希码值。
        另请参见:
        Object.equals(java.lang.Object)System.identityHashCode(java.lang.Object)