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

Class SinglePixelPackedSampleModel



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

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

       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)
        构造一个SinglePixelPackedSampleModel,其bitMasks.length带和扫描线步长等于scanlineStride数据数组元素。 每个样本存储在数据数组元素中位于其相应位掩码的位置。 每个位掩码必须是连续的,掩码不能重叠。 超过数据类型容量的位掩码将被截断。
        参数
        dataType - 存储样品的数据类型。
        w - 描述的图像数据区域的宽度(以像素为单位)。
        h - 描述的图像数据区域的高度(以像素为单位)。
        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:
        createCompatibleSampleModel在类 SampleModel
        参数
        w - 所得的宽度 SampleModel
        h - 所得的 SampleModel的高度
        结果
        一个 SinglePixelPackedSampleModel具有指定的宽度和高度。
        异常
        IllegalArgumentException - 如果 wh不大于0
      • createDataBuffer

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

        public int[] getSampleSize​()
        返回所有频带的每个样本的位数。
        Specified by:
        getSampleSizeSampleModel
        结果
        所有频段的样本大小。
      • getSampleSize

        public int getSampleSize​(int band)
        返回指定频带的每个样本的位数。
        Specified by:
        getSampleSizeSampleModel
        参数
        band - 指定的乐队
        结果
        指定频段样本的大小。
      • getOffset

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

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

        public int[] getBitMasks​()
        返回所有频段的位掩码。
        结果
        所有乐队的位掩码。
      • 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 - 如果频带参数的长度大于样本模型中的频带数。
      • getDataElements

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

        下面的代码说明从DataBuffer中为一个像素的数据db1 ,其存储布局由SinglePixelPackedSampleModel,它描述sppsm1到DataBuffer db2 ,其存储布局由SinglePixelPackedSampleModel,它描述sppsm2 传输通常比使用getPixel / setPixel更有效率。

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

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

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

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

        下面的代码说明从DataBuffer中为一个像素的数据db1 ,其存储布局由SinglePixelPackedSampleModel,它描述sppsm1到DataBuffer db2 ,其存储布局由SinglePixelPackedSampleModel,它描述sppsm2 传输通常比使用getPixel / setPixel更有效率。

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

        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。
        重写:
        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)
        使用int作为输入,为DataBuffer中位于(x,y)处的像素的指定波段设置一个样本。 如果坐标不在边界内,则可能抛出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数组中为指定的像素矩形设置指定带中的样本。 如果坐标不在边界内,则可能抛出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)