Module  java.desktop
软件包  java.awt.image

Class BandedSampleModel



  • public final class BandedSampleModel
    extends ComponentSampleModel
    该类表示以频带交错方式存储的图像数据,并且像素的每个样本占据DataBuffer的一个数据元素。 它对ComponentSampleModel进行子类化,但提供了一种比ComponentSampleModel提供的访问频带交错图像数据更有效的实现。 通常在使用存储DataBuffer不同库中每个频段的样本数据的图像时,应使用该类。 提供访问方法,以便可以直接操纵图像数据。 像素幅度是同一扫描线上同一频带的两个样本之间的数据数组元素数。 BandedSampleModel的像素步幅是一个。 扫描线步幅是给定样本与下一个扫描线同一列中相应样本之间的数据数组元素数。 带偏移表示来自保持每个频带的DataBuffer组的第一数据阵列元素到该频带的第一个样本的数据数组元素的数量。 频带从0到N-1编号。 存储体索引表示数据缓冲器的存储体与图像数据的区段之间的对应关系。 该类支持TYPE_BYTETYPE_USHORTTYPE_SHORTTYPE_INTTYPE_FLOAT ,并TYPE_DOUBLE数据类型
    • 构造方法详细信息

      • BandedSampleModel

        public BandedSampleModel​(int dataType,
                                 int w,
                                 int h,
                                 int numBands)
        构造带指定参数的BandedSampleModel。 像素步幅将是一个数据元素。 扫描线步幅将与宽度相同。 每个频带将被存储在一个单独的存储区中,并且所有频带偏移将为零。
        参数
        dataType - 存储样本的数据类型。
        w - 描述的图像数据区域的宽度(以像素为单位)。
        h - 描述的图像数据区域的高度(以像素为单位)。
        numBands - 图像数据的频带数。
        异常
        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 - 如果 dataType不是支持的数据类型之一
    • 方法详细信息

      • createCompatibleSampleModel

        public SampleModel createCompatibleSampleModel​(int w,
                                                       int h)
        创建一个带有指定宽度和高度的新的BandedSampleModel。 新的BandedSampleModel将具有与BandedSampleModel相同数量的频带,存储数据类型和银行索引。 频带偏移将被压缩,使得频带之间的偏移将为w * pixelStride,并且所有频带偏移的最小值为零。
        重写:
        createCompatibleSampleModelComponentSampleModel
        参数
        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组合的频带子集的图像。
        重写:
        createSubsetSampleModelComponentSampleModel
        参数
        bands - 来自这个 ComponentSampleModel的乐队的一个子集
        结果
        一个 ComponentSampleModel用这个 ComponentSampleModel的带子子集创建。
        异常
        RasterFormatException - 如果带的数量大于此样本模型中的银行数量。
        IllegalArgumentException - 如果 dataType不是支持的数据类型之一
      • createDataBuffer

        public DataBuffer createDataBuffer​()
        创建对应于此BandedSampleModel的DataBuffer,DataBuffer的数据类型,数量和大小将与此BandedSampleModel一致。
        重写:
        createDataBufferComponentSampleModel
        结果
        一个 DataBuffer其数据类型,数量和大小与此 ComponentSampleModel一致。
        异常
        IllegalArgumentException - 如果 dataType不是支持的类型之一。
      • getDataElements

        public Object getDataElements​(int x,
                                      int y,
                                      Object obj,
                                      DataBuffer data)
        返回TransferType类型的原始数组中单个像素的数据。 对于BandedSampleModel,它将与数据类型相同,每个数组元素将返回一个样本。 一般来说,obj应该以null的形式传入,这样Object将被自动创建,并且将是正确的原始数据类型。

        下面的代码说明从DataBuffer中为一个像素的数据db1 ,其存储布局通过的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具有相同数量的频带,则使用getDataElements / setDataElements在两个DataBuffer / SampleModel对之间传输是合法的,相应的频带具有与每个样本相同的位数,TransferTypes是相同的。

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

        重写:
        getDataElementsComponentSampleModel
        参数
        x - 像素位置的X坐标
        y - 像素位置的Y坐标
        obj - 如果非空,则返回像素数据的原始数组。
        data - 包含图像数据的DataBuffer。
        结果
        指定像素的数据。
        另请参见:
        setDataElements(int, int, Object, DataBuffer)
      • getPixel

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

        public int[] getPixels​(int x,
                               int y,
                               int w,
                               int h,
                               int[] iArray,
                               DataBuffer data)
        返回int数组中指定的像素矩形的所有样本,每个数据数组元素一个样本。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException。
        重写:
        getPixelsComponentSampleModel
        参数
        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。
        重写:
        getSampleComponentSampleModel
        参数
        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。
        重写:
        getSampleFloatComponentSampleModel
        参数
        x - 像素位置的X坐标
        y - 像素位置的Y坐标
        b - 乐队返回
        data - 包含图像数据的DataBuffer
        结果
        表示指定像素的指定频带中的样本的浮点值。
      • getSampleDouble

        public double getSampleDouble​(int x,
                                      int y,
                                      int b,
                                      DataBuffer data)
        将位于(x,y)的像素的指定带中的样本返回为双倍。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException。
        重写:
        getSampleDoubleComponentSampleModel
        参数
        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。
        重写:
        getSamplesComponentSampleModel
        参数
        x - 左上角像素位置的X坐标
        y - 左上角像素位置的Y坐标
        w - 像素矩形的宽度
        h - 像素矩形的高度
        b - 乐队返回
        iArray - 如果非空,则返回此数组中的样本
        data - 包含图像数据的DataBuffer
        结果
        在指定区域内的像素的样本。
        另请参见:
        setSamples(int, int, int, int, int, int[], DataBuffer)
      • setDataElements

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

        下面的代码说明从DataBuffer中为一个像素的数据db1 ,其存储布局通过的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具有相同数量的频带,则使用getDataElements / setDataElements在两个DataBuffer / SampleModel对之间传输是合法的,相应的频带具有与每个样本相同的位数,TransferTypes是相同的。

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

        重写:
        setDataElementsComponentSampleModel
        参数
        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。
        重写:
        setPixelComponentSampleModel
        参数
        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。
        重写:
        setPixelsComponentSampleModel
        参数
        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。
        重写:
        setSampleComponentSampleModel
        参数
        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。
        重写:
        setSampleComponentSampleModel
        参数
        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。
        重写:
        setSampleComponentSampleModel
        参数
        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。
        重写:
        setSamplesComponentSampleModel
        参数
        x - 左上角像素位置的X坐标
        y - 左上角像素位置的Y坐标
        w - 像素矩形的宽度
        h - 像素矩形的高度
        b - 乐队设置
        iArray - 输入样本数组
        data - 包含图像数据的DataBuffer
        另请参见:
        getSamples(int, int, int, int, int, int[], DataBuffer)
      • hashCode

        public int hashCode​()
        描述从类别复制: Object
        返回对象的哈希码值。 支持这种方法是为了散列表的利益,如HashMap所提供的那样

        hashCode的总合同是:

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

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

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