- java.lang.Object
-
- java.awt.image.SampleModel
-
- java.awt.image.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);
-
-
Field Summary
-
Fields inherited from class java.awt.image.SampleModel
dataType, height, numBands, width
-
-
构造方法摘要
构造方法 Constructor 描述 MultiPixelPackedSampleModel(int dataType, int w, int h, int numberOfBits)构造具有指定数据类型,宽度,高度和每像素位数的MultiPixelPackedSampleModel。MultiPixelPackedSampleModel(int dataType, int w, int h, int numberOfBits, int scanlineStride, int dataBitOffset)构造具有指定数据类型,宽度,高度,每像素位数,扫描线步长和数据位偏移的MultiPixelPackedSampleModel。
-
方法摘要
所有方法 接口方法 具体的方法 Modifier and Type 方法 描述 SampleModelcreateCompatibleSampleModel(int w, int h)创建一个新的MultiPixelPackedSampleModel具有指定的宽度和高度。DataBuffercreateDataBuffer()创建一个DataBuffer对应于这个MultiPixelPackedSampleModel。SampleModelcreateSubsetSampleModel(int[] bands)创建一个新的MultiPixelPackedSampleModel与这个MultiPixelPackedSampleModel的频带的子集。booleanequals(Object o)指示一些其他对象是否等于此。intgetBitOffset(int x)将偏移量(以位为单位)返回到扫描线的x像素存储的数据元素中。intgetDataBitOffset()以位为单位返回数据位偏移量。ObjectgetDataElements(int x, int y, Object obj, DataBuffer data)返回TransferType类型的原始数组中单个像素的数据。intgetNumDataElements()intgetOffset(int x, int y)返回数据数组元素中像素(x,y)的偏移量。int[]getPixel(int x, int y, int[] iArray, DataBuffer data)返回int数组的第一个元素中指定的单频带像素。intgetPixelBitStride()返回像素位以位为单位。intgetSample(int x, int y, int b, DataBuffer data)返回为int位于(x,y)处的像素的指定带中的样本。int[]getSampleSize()返回所有频带的每个样本的位数。intgetSampleSize(int band)返回指定频带的每个样本的位数。intgetScanlineStride()返回扫描线步幅。intgetTransferType()返回用于通过getDataElements和setDataElements方法传输像素的TransferType。inthashCode()返回对象的哈希码值。voidsetDataElements(int x, int y, Object obj, DataBuffer data)从TransferType类型的原始数组中设置指定的DataBuffer单个像素的数据。voidsetPixel(int x, int y, int[] iArray, DataBuffer data)使用int阵列设置DataBuffer的像素进行输入。voidsetSample(int x, int y, int b, int s, DataBuffer data)在DataBuffer使用int作为输入,设置位于(x,y)处的像素的指定频带中的样本。-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from class java.awt.image.SampleModel
getDataElements, getDataType, getHeight, getNumBands, getPixel, getPixel, getPixels, getPixels, getPixels, getSampleDouble, getSampleFloat, getSamples, getSamples, getSamples, getWidth, setDataElements, setPixel, setPixel, setPixels, setPixels, setPixels, setSample, setSample, setSamples, setSamples, setSamples
-
-
-
-
构造方法详细信息
-
MultiPixelPackedSampleModel
public MultiPixelPackedSampleModel(int dataType, int w, int h, int numberOfBits)构造具有指定数据类型,宽度,高度和每像素位数的MultiPixelPackedSampleModel。- 参数
-
dataType- 存储样本的数据类型 -
w- 描述的图像数据区域的宽度(以像素为单位) -
h- 描述的图像数据区域的高度(以像素为单位) -
numberOfBits- 每像素的位数 - 异常
-
IllegalArgumentException-如果dataType不是非此即彼DataBuffer.TYPE_BYTE,DataBuffer.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- 图像数据的行走 -
dataBitOffset- 描述的图像数据区域的数据位偏移量 - 异常
-
RasterFormatException- 如果每像素的比特数不是2的幂,或者如果2个像素的数量不适合于一个数据元素。 -
IllegalArgumentException- 如果w或h不大于0 -
IllegalArgumentException-如果dataType不是非此即彼DataBuffer.TYPE_BYTE,DataBuffer.TYPE_USHORT,或DataBuffer.TYPE_INT
-
-
方法详细信息
-
createCompatibleSampleModel
public SampleModel createCompatibleSampleModel(int w, int h)
创建一个新的MultiPixelPackedSampleModel具有指定的宽度和高度。 新的MultiPixelPackedSampleModel具有与MultiPixelPackedSampleModel相同的存储数据类型和每像素的MultiPixelPackedSampleModel。- Specified by:
-
createCompatibleSampleModel在SampleModel - 参数
-
w- 指定的宽度 -
h- 指定的高度 - 结果
-
一个
SampleModel,具有指定的宽度和高度,并具有与MultiPixelPackedSampleModel相同的存储数据类型和每像素的MultiPixelPackedSampleModel。 - 异常
-
IllegalArgumentException- 如果w或h不大于0
-
createDataBuffer
public DataBuffer createDataBuffer()
创建一个DataBuffer对应于这个MultiPixelPackedSampleModel。DataBuffer对象的数据类型和大小与此MultiPixelPackedSampleModel一致。DataBuffer有一个银行。- Specified by:
-
createDataBuffer在SampleModel - 结果
-
一个
DataBuffer具有相同的数据类型和大小,这个MultiPixelPackedSampleModel。
-
getNumDataElements
public int getNumDataElements()
返回通过getDataElements(int, int, java.lang.Object, java.awt.image.DataBuffer)和setDataElements(int, int, java.lang.Object, java.awt.image.DataBuffer)方法传输一个像素所需的数据元素数。 对于一个MultiPixelPackedSampleModel,这是一个。- Specified by:
-
getNumDataElements在SampleModel - 结果
- 数据元素的数量。
- 另请参见:
-
SampleModel.getDataElements(int, int, Object, DataBuffer),SampleModel.getDataElements(int, int, int, int, Object, DataBuffer),SampleModel.setDataElements(int, int, Object, DataBuffer),SampleModel.setDataElements(int, int, int, int, Object, DataBuffer),SampleModel.getTransferType()
-
getSampleSize
public int[] getSampleSize()
返回所有频带的每个样本的位数。- Specified by:
-
getSampleSize在SampleModel - 结果
- 每个样本的位数。
-
getSampleSize
public int getSampleSize(int band)
返回指定频带的每个样本的位数。- Specified by:
-
getSampleSize在SampleModel - 参数
-
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()
返回像素位以位为单位。 该值与每像素的位数相同。- 结果
-
这
pixelBitStride的MultiPixelPackedSampleModel。
-
getDataBitOffset
public int getDataBitOffset()
以位为单位返回数据位偏移量。- 结果
-
该
dataBitOffset的这个MultiPixelPackedSampleModel。
-
getTransferType
public int getTransferType()
返回用于通过getDataElements和setDataElements方法传输像素的TransferType。 TransferType可能与存储DataType相同也可能不一样。 TransferType是DataBuffer.TYPE_BYTE,DataBuffer.TYPE_USHORT或DataBuffer.TYPE_INT之一。- 重写:
-
getTransferType在SampleModel - 结果
- 转移类型。
- 另请参见:
-
SampleModel.getDataElements(int, int, Object, DataBuffer),SampleModel.getDataElements(int, int, int, int, Object, DataBuffer),SampleModel.setDataElements(int, int, Object, DataBuffer),SampleModel.setDataElements(int, int, int, int, Object, DataBuffer),SampleModel.getNumDataElements(),DataBuffer
-
createSubsetSampleModel
public SampleModel createSubsetSampleModel(int[] bands)
创建一个新的MultiPixelPackedSampleModel与这个MultiPixelPackedSampleModel的频带的子集。 由于MultiPixelPackedSampleModel只有一个频段,所以频段参数的长度必须为1,表示第0个频段。- Specified by:
-
createSubsetSampleModel在SampleModel - 参数
-
bands- 指定的乐队 - 结果
-
一个新的
SampleModel与这个MultiPixelPackedSampleModel的频带的子集。 - 异常
-
RasterFormatException- 如果请求的频带数不是一个。 -
IllegalArgumentException- 如果w或h不大于0
-
getSample
public int getSample(int x, int y, int b, DataBuffer data)返回为int位于(x,y)处的像素的指定带中的样本。 如果坐标不在边界内,则抛出ArrayIndexOutOfBoundsException。- Specified by:
-
getSample在SampleModel - 参数
-
x- 指定像素的X坐标 -
y- 指定像素的Y坐标 -
b- 要返回的频带,假定为0 -
data- 包含图像数据的DataBuffer - 结果
- 指定的带包含指定像素的样本。
- 异常
-
ArrayIndexOutOfBoundsException- 如果指定的坐标不在边界内。 - 另请参见:
-
setSample(int, int, int, int, DataBuffer)
-
setSample
public void setSample(int x, int y, int b, int s, DataBuffer data)在DataBuffer使用int设置位于(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描述为MultiPixelPackedSampleModelmppsm1到DataBuffer db2,其存储布局由MultiPixelPackedSampleModel mppsm2描述。 转移通常比使用getPixel或setPixel更有效。MultiPixelPackedSampleModel mppsm1, mppsm2; DataBufferInt db1, db2; mppsm2.setDataElements(x, y, mppsm1.getDataElements(x, y, null, db1), db2);如果SampleModels具有相同数量的频带,则使用getDataElements或setDataElements在两个DataBuffer/SampleModel对之间传输是合法的,对应的频带具有与每个样本相同的位数,TransferTypes是相同的。如果
obj不是null,它应该是TransferType类型的原始数组。 否则,抛出一个ClassCastException。 一个ArrayIndexOutOfBoundsException如果坐标不在边界被抛出,或者如果obj不null并没有大到足以容纳像素数据。- Specified by:
-
getDataElements在SampleModel - 参数
-
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数组的第一个元素中指定的单频带像素。 如果坐标不在边界内,则抛出ArrayIndexOutOfBoundsException。- 重写:
-
getPixel在SampleModel - 参数
-
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)从指定的DataBuffer的单个像素的数据设置TransferType类型的原始数组。 对于MultiPixelPackedSampleModel,只有数组的第一个元素保存有效数据,并且类型必须是可容纳单个像素的DataBuffer.TYPE_BYTE,DataBuffer.TYPE_USHORT或DataBuffer.TYPE_INT中最小的数据。以下代码说明将
DataBuffer db1的存储布局由MultiPixelPackedSampleModelmppsm1描述的MultiPixelPackedSampleModel一个像素的数据传输到DataBuffer db2,其存储布局由MultiPixelPackedSampleModel mppsm2描述。 转移通常比使用getPixel或setPixel更有效。MultiPixelPackedSampleModel mppsm1, mppsm2; DataBufferInt db1, db2; mppsm2.setDataElements(x, y, mppsm1.getDataElements(x, y, null, db1), db2);如果SampleModel对象具有相同数量的频带,则使用getDataElements或setDataElements在两个DataBuffer/SampleModel对之间传输是合法的,相应的频带具有与每个样本相同的位数,TransferTypes是相同的。obj必须是TransferType类型的原始数组。 否则,将抛出一个ClassCastException。 一个ArrayIndexOutOfBoundsException如果坐标不在边界被抛出,或者如果obj不够大,无法容纳像素数据。- Specified by:
-
setDataElements在SampleModel - 参数
-
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)
-
equals
public boolean equals(Object o)
描述从类别复制:Object指示一些其他对象是否等于此。equals方法在非空对象引用上实现等价关系:- 自反性 :对于任何非空的参考值
x,x.equals(x)应该返回true。 - 它是对称的 :对于任何非空引用值
x和y,x.equals(y)应该返回true当且仅当y.equals(x)回报true。 - 传递性 :对于任何非空引用值
x,y,并z,如果x.equals(y)回报true和y.equals(z)回报true,然后x.equals(z)应该返回true。 - 它是一致的 :对于任何非空引用值
x和y,多重调用x.equals(y)始终返回true或一致返回false,只要在equals对对象的比较使用的信息进行修改。 - 对于任何非空的参考值
x,x.equals(null)应该返回false。
该
equals类方法Object实现对象上差别可能性最大的相等关系; 也就是说,对于任何非空参考值x和y,当且仅当x和y引用相同对象(x == y具有值true)时,该方法返回true。请注意,无论何时覆盖此方法,通常需要覆盖
hashCode方法,以便维护hashCode方法的通用合同,该方法规定相等的对象必须具有相等的哈希码。- 重写:
-
equals在Object - 参数
-
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可能或可能不被实现为对象的存储器地址的某些功能。)- 重写:
-
hashCode在Object - 结果
- 该对象的哈希码值。
- 另请参见:
-
Object.equals(java.lang.Object),System.identityHashCode(java.lang.Object)
- 无论何时在执行Java应用程序时多次在同一对象上调用该对象,
-
-