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

Class SinglePixelPackedSampleModel


  • public class SinglePixelPackedSampleModel
    extends SampleModel
    该类表示打包的像素数据,使得构成单个像素的N个样本存储在单个数据阵列元素中,并且每个数据数据阵列元素仅保存一个像素的样本。 该类支持TYPE_BYTETYPE_USHORTTYPE_INT数据类型。 所有数据数组元素都驻留在DataBuffer的第一个库中。 提供了访问器方法,以便可以直接操作图像数据。 扫描线步幅是给定样本与下一扫描线的同一列中的相应样本之间的数据阵列元素的数量。 位掩码是提取表示像素带的样本所需的掩码。 位偏移是表示像素频带的样本的数据阵列元素中的位偏移。

    以下代码说明从DataBuffer data提取表示像素x,y波段b的样本位:

       int sample = data.getElem(y * scanlineStride + x); sample = (sample & bitMasks[b]) >>> bitOffsets[b];  
    • 构造方法详细信息

      • SinglePixelPackedSampleModel

        public SinglePixelPackedSampleModel​(int dataType,
                                            int w,
                                            int h,
                                            int[] bitMasks)
        使用bitMasks.length波段构造SinglePixelPackedSampleModel。 每个样本存储在数据数组元素中相应位掩码的位置。 每个位掩码必须是连续的,并且掩码不能重叠。 超出数据类型容量的位掩码将被截断。
        参数
        dataType - 用于存储样本的数据类型。
        w - 所述图像数据区域的宽度(以像素为单位)。
        h - 所描述的图像数据的区域的高度(以像素为单位)。
        bitMasks - 所有波段的位掩码。
        异常
        IllegalArgumentException -如果 dataType不是非此即彼 DataBuffer.TYPE_BYTEDataBuffer.TYPE_USHORT ,或 DataBuffer.TYPE_INT
      • SinglePixelPackedSampleModel

        public SinglePixelPackedSampleModel​(int dataType,
                                            int w,
                                            int h,
                                            int scanlineStride,
                                            int[] bitMasks)
        构造具有bitMasks.length波段和扫描线步长等于scanlineStride数据数组元素的SinglePixelPackedSampleModel。 每个样本存储在数据数组元素中相应位掩码的位置。 每个位掩码必须是连续的,并且掩码不能重叠。 超出数据类型容量的位掩码将被截断。
        参数
        dataType - 用于存储样本的数据类型。
        w - 描述的图像数据区域的宽度(以像素为单位)。
        h - 所描述的图像数据区域的高度(以像素为单位)。
        scanlineStride - 图像数据的行 scanlineStride
        bitMasks - 所有波段的位掩码。
        异常
        IllegalArgumentException - 如果 wh不大于0
        IllegalArgumentException -如果在任何掩模 bitMask不是连续的
        IllegalArgumentException -如果 dataType不是非此即彼 DataBuffer.TYPE_BYTEDataBuffer.TYPE_USHORT ,或 DataBuffer.TYPE_INT
    • 方法详细信息

      • createCompatibleSampleModel

        public SampleModel createCompatibleSampleModel​(int w,
                                                       int h)
        创建具有指定宽度和高度的新SinglePixelPackedSampleModel。 新的SinglePixelPackedSampleModel将具有与此SinglePixelPackedSampleModel相同的存储数据类型和位掩码。
        Specified by:
        createCompatibleSampleModelSampleModel
        参数
        w - 生成的宽度 SampleModel
        h - 结果 SampleModel的高度
        结果
        a SinglePixelPackedSampleModel具有指定的宽度和高度。
        异常
        IllegalArgumentException - 如果 wh不大于0
      • createDataBuffer

        public DataBuffer createDataBuffer()
        创建与此SinglePixelPackedSampleModel对应的DataBuffer。 DataBuffer的数据类型和大小将与此SinglePixelPackedSampleModel一致。 DataBuffer将拥有一个银行。
        Specified by:
        createDataBufferSampleModel
        结果
        DataBuffer对应于这个 SampleModel
      • getSampleSize

        public int[] getSampleSize()
        返回所有band的每个样本的位数。
        Specified by:
        getSampleSize在类 SampleModel
        结果
        所有波段的样本大小。
      • getSampleSize

        public int getSampleSize​(int band)
        返回指定band的每个样本的位数。
        Specified by:
        getSampleSize在类 SampleModel
        参数
        band - 指定的波段
        结果
        指定波段的样本大小。
      • getOffset

        public int getOffset​(int x,
                             int y)
        返回像素(x,y)的偏移量(在数据数组元素中)。 包含像素x,y的数据元素可以从具有SinglePixelPackedSampleModel sppsm的DataBuffer data检索为:
          data.getElem(sppsm.getOffset(x, y)); 
        参数
        x - 指定像素的X坐标
        y - 指定像素的Y坐标
        结果
        指定像素的偏移量。
      • getBitOffsets

        public int[] getBitOffsets()
        将位偏移返回到表示所有频带的像素的数据数组元素中。
        结果
        表示所有频带的像素的位偏移。
      • getBitMasks

        public int[] getBitMasks()
        返回所有band的位掩码。
        结果
        所有波段的位掩码。
      • getScanlineStride

        public int getScanlineStride()
        返回此SinglePixelPackedSampleModel的扫描行间距。
        结果
        这个 SinglePixelPackedSampleModel的扫描线大步。
      • createSubsetSampleModel

        public SampleModel createSubsetSampleModel​(int[] bands)
        这将创建一个新的SinglePixelPackedSampleModel,其中包含此SinglePixelPackedSampleModel的波段子集。 新的SinglePixelPackedSampleModel可以与现有SinglePixelPackedSampleModel可以使用的任何DataBuffer一起使用。 新的SinglePixelPackedSampleModel / DataBuffer组合将表示具有原始SinglePixelPackedSampleModel / DataBuffer组合的波段子集的图像。
        Specified by:
        createSubsetSampleModelSampleModel
        参数
        bands - 这个 SampleModel的频段子集
        结果
        带有 SampleModel频段子集的 SampleModel
        异常
        RasterFormatException - 如果band参数的长度大于样本模型中的band数。
      • getDataElements

        public Object getDataElements​(int x,
                                      int y,
                                      Object obj,
                                      DataBuffer data)
        返回TransferType类型的基本数组中单个像素的数据。 对于SinglePixelPackedSampleModel,该数组将具有一个元素,并且该类型将与存储数据类型相同。 通常,obj应该作为null传递,以便Object将自动创建并且将具有正确的原始数据类型。

        以下代码示出了将一个像素的数据从DataBuffer db1 (其存储布局由SinglePixelPackedSampleModel sppsm1描述) sppsm1到DataBuffer db2 ,其存储布局由SinglePixelPackedSampleModelsppsm2 sppsm2 传输通常比使用getPixel / setPixel更有效。

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

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

        Specified by:
        getDataElementsSampleModel
        参数
        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。
        重写:
        getPixelSampleModel
        参数
        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在类 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)
      • getSamples

        public int[] getSamples​(int x,
                                int y,
                                int w,
                                int h,
                                int b,
                                int[] iArray,
                                DataBuffer data)
        返回int数组中指定矩形像素的指定band的样本,每个数组元素一个样本。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException。
        重写:
        getSamples在类 SampleModel
        参数
        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中单个像素的数据。 对于SinglePixelPackedSampleModel,只有数组的第一个元素将保存有效数据,并且数组的类型必须与SinglePixelPackedSampleModel的存储数据类型相同。

        以下代码示出了将一个像素的数据从DataBuffer db1 (其存储布局由SinglePixelPackedSampleModelsppsm1描述) sppsm1到DataBuffer db2 ,其存储布局由SinglePixelPackedSampleModelsppsm2 sppsm2 传输通常比使用getPixel / setPixel更有效。

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

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

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