- 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 方法 描述 SampleModel
createCompatibleSampleModel(int w, int h)
创建一个新的MultiPixelPackedSampleModel
具有指定的宽度和高度。DataBuffer
createDataBuffer()
创建一个DataBuffer
对应于这个MultiPixelPackedSampleModel
。SampleModel
createSubsetSampleModel(int[] bands)
创建一个新的MultiPixelPackedSampleModel
与这个MultiPixelPackedSampleModel
的频带的子集。boolean
equals(Object o)
指示一些其他对象是否等于此。int
getBitOffset(int x)
将偏移量(以位为单位)返回到扫描线的x
像素存储的数据元素中。int
getDataBitOffset()
以位为单位返回数据位偏移量。Object
getDataElements(int x, int y, Object obj, DataBuffer data)
返回TransferType类型的原始数组中单个像素的数据。int
getNumDataElements()
int
getOffset(int x, int y)
返回数据数组元素中像素(x,y)的偏移量。int[]
getPixel(int x, int y, int[] iArray, DataBuffer data)
返回int
数组的第一个元素中指定的单频带像素。int
getPixelBitStride()
返回像素位以位为单位。int
getSample(int x, int y, int b, DataBuffer data)
返回为int
位于(x,y)处的像素的指定带中的样本。int[]
getSampleSize()
返回所有频带的每个样本的位数。int
getSampleSize(int band)
返回指定频带的每个样本的位数。int
getScanlineStride()
返回扫描线步幅。int
getTransferType()
返回用于通过getDataElements
和setDataElements
方法传输像素的TransferType。int
hashCode()
返回对象的哈希码值。void
setDataElements(int x, int y, Object obj, DataBuffer data)
从TransferType类型的原始数组中设置指定的DataBuffer
单个像素的数据。void
setPixel(int x, int y, int[] iArray, DataBuffer data)
使用int
阵列设置DataBuffer
的像素进行输入。void
setSample(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
描述为MultiPixelPackedSampleModel
mppsm1
到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
的存储布局由MultiPixelPackedSampleModel
mppsm1
描述的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应用程序时多次在同一对象上调用该对象,
-
-