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

Class MultiPixelPackedSampleModel


  • public class MultiPixelPackedSampleModel
    extends SampleModel
    MultiPixelPackedSampleModel类表示单带图像,可以将多个单样本像素打包到一个数据元素中。 不允许像素跨越数据元素。 数据类型可以是DataBuffer.TYPE_BYTE,DataBuffer.TYPE_USHORT或DataBuffer.TYPE_INT。 每个像素必须是2位数的幂,并且2个像素的幂必须恰好适合一个数据元素。 像素位步幅等于每像素的位数。 扫描线步幅在数据元素中,最后几个数据元素可以用未使用的像素填充。 数据位偏移是从DataBuffer开始到第一个像素的位偏移量,并且必须是像素位步长的倍数。

    以下代码说明从DataBuffer data提取像素x, y的位并将像素数据存储在类型为dataType数据元素中:

       int dataElementSize = DataBuffer.getDataTypeSize(dataType); int bitnum = dataBitOffset + x*pixelBitStride; int element = data.getElem(y*scanlineStride + bitnum/dataElementSize); int shift = dataElementSize - (bitnum & (dataElementSize-1)) - pixelBitStride; int pixel = (element >> shift) & ((1 << pixelBitStride) - 1);  
    • 构造方法详细信息

      • MultiPixelPackedSampleModel

        public MultiPixelPackedSampleModel​(int dataType,
                                           int w,
                                           int h,
                                           int numberOfBits)
        构造具有指定数据类型,宽度,高度和每像素位数的 MultiPixelPackedSampleModel
        参数
        dataType - 用于存储样本的数据类型
        w - 所描述的图像数据区域的宽度(以像素为单位)
        h - 所描述的图像数据区域的高度(以像素为单位)
        numberOfBits - 每像素的位数
        异常
        IllegalArgumentException -如果 dataType不是非此即彼 DataBuffer.TYPE_BYTEDataBuffer.TYPE_USHORT ,或 DataBuffer.TYPE_INT
      • MultiPixelPackedSampleModel

        public MultiPixelPackedSampleModel​(int dataType,
                                           int w,
                                           int h,
                                           int numberOfBits,
                                           int scanlineStride,
                                           int dataBitOffset)
        构造一个具有指定数据类型,宽度,高度,每像素位数,扫描行间距和数据位偏移的 MultiPixelPackedSampleModel
        参数
        dataType - 用于存储样本的数据类型
        w - 所描述的图像数据区域的宽度(以像素为单位)
        h - 所描述的图像数据区域的高度(以像素为单位)
        numberOfBits - 每像素的位数
        scanlineStride - 图像数据的行 scanlineStride
        dataBitOffset - 所描述的图像数据区域的数据位偏移
        异常
        RasterFormatException - 如果每个像素的比特数不是2的幂,或者2个像素的功率不适合一个数据元素。
        IllegalArgumentException - 如果 wh不大于0
        IllegalArgumentException -如果 dataType不是非此即彼 DataBuffer.TYPE_BYTEDataBuffer.TYPE_USHORT ,或 DataBuffer.TYPE_INT
    • 方法详细信息

      • createCompatibleSampleModel

        public SampleModel createCompatibleSampleModel​(int w,
                                                       int h)
        创建具有指定宽度和高度的新MultiPixelPackedSampleModel 新的MultiPixelPackedSampleModel具有与此MultiPixelPackedSampleModel相同的存储数据类型和每像素MultiPixelPackedSampleModel
        Specified by:
        createCompatibleSampleModelSampleModel
        参数
        w - 指定的宽度
        h - 指定的高度
        结果
        具有指定宽度和高度的SampleModel具有与此MultiPixelPackedSampleModel相同的存储数据类型和每像素MultiPixelPackedSampleModel
        异常
        IllegalArgumentException - 如果 wh不大于0
      • createDataBuffer

        public DataBuffer createDataBuffer()
        创建一个DataBuffer ,对应于此MultiPixelPackedSampleModel DataBuffer对象的数据类型和大小与此MultiPixelPackedSampleModel一致。 DataBuffer有一个银行。
        Specified by:
        createDataBufferSampleModel
        结果
        一个 DataBuffer具有相同的数据类型和大小,因为这 MultiPixelPackedSampleModel
      • getSampleSize

        public int[] getSampleSize()
        返回所有band的每个样本的位数。
        Specified by:
        getSampleSizeSampleModel
        结果
        每个样本的位数。
      • getSampleSize

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

        public int getOffset​(int x,
                             int y)
        返回数据数组元素中像素(x,y)的偏移量。
        参数
        x - 指定像素的X坐标
        y - 指定像素的Y坐标
        结果
        指定像素的偏移量。
      • getBitOffset

        public int getBitOffset​(int x)
        将以位为单位的偏移量返回到为扫描线的x像素存储的数据元素中。 所有扫描线的偏移量都相同。
        参数
        x - 指定的像素
        结果
        指定像素的位偏移量。
      • getScanlineStride

        public int getScanlineStride()
        返回扫描线步幅。
        结果
        这个 MultiPixelPackedSampleModel的扫描线步幅。
      • getPixelBitStride

        public int getPixelBitStride()
        以位为单位返回像素位跨距。 该值与每像素的位数相同。
        结果
        pixelBitStrideMultiPixelPackedSampleModel
      • getDataBitOffset

        public int getDataBitOffset()
        以位为单位返回数据位偏移量。
        结果
        dataBitOffset的这个 MultiPixelPackedSampleModel
      • createSubsetSampleModel

        public SampleModel createSubsetSampleModel​(int[] bands)
        创建一个新的MultiPixelPackedSampleModel这个的band子集MultiPixelPackedSampleModel 由于MultiPixelPackedSampleModel只有一个波段,因此波段参数的长度必须为1并指示第0个波段。
        Specified by:
        createSubsetSampleModel在类 SampleModel
        参数
        bands - 指定的频段
        结果
        新的 SampleModel这个团伙的一个子集 MultiPixelPackedSampleModel
        异常
        RasterFormatException - 如果请求的频段数不是一个。
        IllegalArgumentException - 如果 wh不大于0
      • getSample

        public int getSample​(int x,
                             int y,
                             int b,
                             DataBuffer data)
        对于位于(x,y)的像素,返回指定波段中的样本的int 如果坐标不在边界内,则抛出ArrayIndexOutOfBoundsException
        Specified by:
        getSampleSampleModel
        参数
        x - 指定像素的X坐标
        y - 指定像素的Y坐标
        b - 要返回的波段,假定为0
        data - 包含图像数据的 DataBuffer
        结果
        包含指定像素的样本的指定band。
        异常
        ArrayIndexOutOfBoundsException - 如果指定的坐标不在边界内。
        另请参见:
        setSample(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:
        setSample在类 SampleModel
        参数
        x - 指定像素的X坐标
        y - 指定像素的Y坐标
        b - 要返回的波段,假定为0
        s - 输入样本为 int
        data - 存储图像数据的 DataBuffer
        异常
        ArrayIndexOutOfBoundsException - 如果坐标不在边界内。
        另请参见:
        getSample(int, int, int, DataBuffer)
      • getDataElements

        public Object getDataElements​(int x,
                                      int y,
                                      Object obj,
                                      DataBuffer data)
        返回TransferType类型的基本数组中单个像素的数据。 对于MultiPixelPackedSampleModel ,数组有一个元素,类型是可以容纳单个像素的DataBuffer.TYPE_BYTE,DataBuffer.TYPE_USHORT或DataBuffer.TYPE_INT中最小的一个。 通常, obj应作为null ,以便Object自动创建并且是正确的基本数据类型。

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

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

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

        Specified by:
        getDataElementsSampleModel
        参数
        x - 指定像素的X坐标
        y - 指定像素的Y坐标
        obj - 一个原始数组,用于返回像素数据或 null
        data - 包含图像数据的 DataBuffer
        结果
        包含指定像素数据的 Object
        异常
        ClassCastException - 如果 obj不是TransferType类型的原始数组或不是 null
        ArrayIndexOutOfBoundsException - 如果坐标不在边界内,或者 obj不是 null或者不足以容纳像素数据
        另请参见:
        setDataElements(int, int, Object, DataBuffer)
      • getPixel

        public int[] getPixel​(int x,
                              int y,
                              int[] iArray,
                              DataBuffer data)
        返回int数组的第一个元素中指定的单个band像素。 如果坐标不在边界内,则抛出ArrayIndexOutOfBoundsException
        重写:
        getPixelSampleModel
        参数
        x - 指定像素的X坐标
        y - 指定像素的Y坐标
        iArray - 包含要返回的像素的数组或 null
        data - 存储图像数据的 DataBuffer
        结果
        包含指定像素的数组。
        异常
        ArrayIndexOutOfBoundsException - 如果坐标不在边界内
        另请参见:
        setPixel(int, int, int[], DataBuffer)
      • setDataElements

        public void setDataElements​(int x,
                                    int y,
                                    Object obj,
                                    DataBuffer data)
        从TransferType类型的基本数组中为指定的DataBuffer的单个像素设置数据。 对于MultiPixelPackedSampleModel ,只有数组的第一个元素包含有效数据,并且类型必须是可以容纳单个像素的DataBuffer.TYPE_BYTE,DataBuffer.TYPE_USHORT或DataBuffer.TYPE_INT中最小的一个。

        以下代码说明了从DataBuffer db1传输一个像素的数据,其存储布局由MultiPixelPackedSampleModel mppsm1描述为DataBuffer db2 ,其存储布局由MultiPixelPackedSampleModel mppsm2描述。 转移通常比使用getPixelsetPixel更有效。

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

        obj必须是TransferType类型的基本数组。 否则,抛出ClassCastException 一个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)
        使用int数组设置DataBuffer的像素作为输入。 如果坐标不在边界内,则抛出ArrayIndexOutOfBoundsException
        重写:
        setPixelSampleModel
        参数
        x - 像素位置的X坐标
        y - 像素位置的Y坐标
        iArray - int阵列中的输入像素
        data - 包含图像数据的 DataBuffer
        另请参见:
        getPixel(int, int, int[], DataBuffer)