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

Class BandedSampleModel


  • public final class BandedSampleModelextends ComponentSampleModel
    该类表示以带交织方式存储的图像数据,并且像素的每个样本占据DataBuffer的一个数据元素。 它是ComponentSampleModel的子类,但提供了一种比ComponentSampleModel提供的更有效的访问波段交错图像数据的实现。 在处理存储DataBuffer不同库中每个波段的样本数据的图像时,通常应使用此类。 提供了访问器方法,以便可以直接操作图像数据。 像素跨度是同一扫描线上相同频带的两个样本之间的数据阵列元素的数量。 BandedSampleModel的像素步幅为1。 扫描线步幅是给定样本与下一扫描线的同一列中的相应样本之间的数据阵列元素的数量。 频带偏移表示从将每个频带保持到频带的第一个采样的DataBuffer的存储体的第一个数据数组元素中的数据数组元素的数量。 频带编号从0到N-1。 银行索引表示数据缓冲区的库与图像数据带之间的对应关系。 该类支持TYPE_BYTETYPE_USHORTTYPE_SHORTTYPE_INTTYPE_FLOATTYPE_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。 band的数量将从bandOffsets bankIndices数组的长度推断出来,这些数组必须相等。 像素步幅将是一个数据元素。
        参数
        dataType - 用于存储样本的数据类型。
        w - 描述的图像数据区域的宽度(以像素为单位)。
        h - 描述的图像数据区域的高度(以像素为单位)。
        scanlineStride - 图像数据的行 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的band子集创建一个新的BandedSampleModel。 新的BandedSampleModel可以与现有BandedSampleModel可以使用的任何DataBuffer一起使用。 新的BandedSampleModel / DataBuffer组合将表示具有原始BandedSampleModel / DataBuffer组合的波段子集的图像。
        重写:
        createSubsetSampleModel ,类 ComponentSampleModel
        参数
        bands - 此 ComponentSampleModel一个频段子集
        结果
        a 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 (其存储布局由bsm1描述) bsm1到DataBuffer db2 ,其存储布局由bsm2描述。 传输通常比使用getPixel / setPixel更有效。

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

        如果obj为非null,则它应该是TransferType类型的基本数组。 否则,抛出ClassCastException。 如果坐标不在边界内,或者如果obj非空并且不足以容纳像素数据,则可能抛出ArrayIndexOutOfBoundsException。

        重写:
        getDataElements在课程 ComponentSampleModel
        参数
        x - 像素位置的X坐标
        y - 像素位置的Y坐标
        obj - 如果为非null,则返回像素数据的基本数组。
        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 - 如果为非null,则返回此数组中的样本
        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。
        重写:
        getPixels在课程 ComponentSampleModel
        参数
        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。
        重写:
        getSample在类 ComponentSampleModel
        参数
        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。
        重写:
        getSampleFloatComponentSampleModel
        参数
        x - 像素位置的X坐标
        y - 像素位置的Y坐标
        b - 乐队返回
        data - 包含图像数据的DataBuffer
        结果
        一个浮点值,表示指定像素中指定像素的样本。
      • 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数组中指定矩形像素的指定band中的样本,每个数据数组元素一个样本。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException。
        重写:
        getSamplesComponentSampleModel
        参数
        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中单个像素的数据。 对于BandedSampleModel,这将与数据类型相同,并且每个数组元素传输一个样本。

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

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

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

        重写:
        setDataElements ,类 ComponentSampleModel
        参数
        x - 像素位置的X坐标
        y - 像素位置的Y坐标
        obj - 如果为非null,则返回此对象中的基元数组
        data - 包含图像数据的DataBuffer
        另请参见:
        getDataElements(int, int, Object, 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
        另请参见:
        getPixel(int, int, int[], 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
        另请参见:
        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)的像素设置指定band中的样本。 如果坐标不在边界内,则可能抛出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)
        使用float作为输入,为DataBuffer中位于(x,y)的像素设置指定band中的样本。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException。
        重写:
        setSample ,类 ComponentSampleModel
        参数
        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)的像素设置指定band中的样本。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException。
        重写:
        setSample ,类 ComponentSampleModel
        参数
        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。
        重写:
        setSamplesComponentSampleModel
        参数
        x - 左上角像素位置的X坐标
        y - 左上角像素位置的Y坐标
        w - 像素矩形的宽度
        h - 像素矩形的高度
        b - 要设置的乐队
        iArray - 输入样本数组
        data - 包含图像数据的DataBuffer
        另请参见:
        getSamples(int, int, int, int, int, int[], DataBuffer)