public class MultiPixelPackedSampleModel extends SampleModel
MultiPixelPackedSampleModel
类表示单带图像,可以将多个单样本像素包装到一个数据元素中。
像素不允许跨数据元素。
数据类型可以是DataBuffer.TYPE_BYTE,DataBuffer.TYPE_USHORT或DataBuffer.TYPE_INT。
每个像素必须是2个位数的幂,2个像素的数量必须恰好适合于一个数据元素。
像素位步长等于每像素的位数。
扫描线步幅在数据元素中,最后几个数据元素可能用未使用的像素填充。
数据位偏移是从DataBuffer
开始到第一个像素的位偏移量,必须是像素位数的倍数。
下面的代码说明提取用于像素的位x, y
从DataBuffer
data
和存储在类型的数据元素的像素数据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);
dataType, height, numBands, width
Constructor and Description |
---|
MultiPixelPackedSampleModel(int dataType, int w, int h, int numberOfBits)
构造具有
MultiPixelPackedSampleModel 数据类型,宽度,高度和每像素位数的MultiPixelPackedSampleModel。
|
MultiPixelPackedSampleModel(int dataType, int w, int h, int numberOfBits, int scanlineStride, int dataBitOffset)
构造一个
MultiPixelPackedSampleModel 与指定数据类型,宽度,高度,每像素比特数,扫描行间距和数据位偏移量。
|
Modifier and Type | Method and Description |
---|---|
SampleModel |
createCompatibleSampleModel(int w, int h)
创建一个具有指定宽度和高度的新的
MultiPixelPackedSampleModel 。
|
DataBuffer |
createDataBuffer()
创建一个
DataBuffer 于此
MultiPixelPackedSampleModel 。
|
SampleModel |
createSubsetSampleModel(int[] bands)
创建一个新
MultiPixelPackedSampleModel 本的band子集
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 方法传输像素的
setDataElements 。
|
int |
hashCode()
返回对象的哈希码值。
|
void |
setDataElements(int x, int y, Object obj, DataBuffer data)
设置在指定的一个单个像素的数据
DataBuffer TransferType类型的基本数组。
|
void |
setPixel(int x, int y, int[] iArray, DataBuffer data)
在
DataBuffer 使用
int 阵列设置一个像素进行输入。
|
void |
setSample(int x, int y, int b, int s, DataBuffer data)
使用
int 输入,为
DataBuffer 中位于(x,y)处的像素的指定波段设置一个采样。
|
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
public MultiPixelPackedSampleModel(int dataType, int w, int h, int numberOfBits)
MultiPixelPackedSampleModel
数据类型,宽度,高度和每像素位数的MultiPixelPackedSampleModel。
dataType
- 存储样本的数据类型
w
- 描述的图像数据区域的宽度(以像素为单位)
h
- 描述的图像数据区域的高度(以像素为单位)
numberOfBits
- 每像素的位数
IllegalArgumentException
-如果
dataType
不是非此即彼
DataBuffer.TYPE_BYTE
,
DataBuffer.TYPE_USHORT
,或
DataBuffer.TYPE_INT
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
public SampleModel createCompatibleSampleModel(int w, int h)
MultiPixelPackedSampleModel
。
新的MultiPixelPackedSampleModel
具有与MultiPixelPackedSampleModel
相同的存储数据类型和每像素的MultiPixelPackedSampleModel
。
createCompatibleSampleModel
在类别
SampleModel
w
- 指定的宽度
h
- 指定的高度
SampleModel
具有指定的宽度和高度,并具有与MultiPixelPackedSampleModel相同的存储数据类型和每像素的MultiPixelPackedSampleModel
。
IllegalArgumentException
- 如果
w
或
h
不大于0
public DataBuffer createDataBuffer()
DataBuffer
于此MultiPixelPackedSampleModel
。
DataBuffer
对象的数据类型和大小与此MultiPixelPackedSampleModel
。
DataBuffer
有一个银行。
createDataBuffer
在类别
SampleModel
DataBuffer
具有与此相同的数据类型和大小
MultiPixelPackedSampleModel
。
public int getNumDataElements()
getDataElements(int, int, java.lang.Object, java.awt.image.DataBuffer)
和setDataElements(int, int, java.lang.Object, java.awt.image.DataBuffer)
方法传输一个像素所需的数据元素数。
对于一个MultiPixelPackedSampleModel
,这是一个。
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()
public int[] getSampleSize()
getSampleSize
在
SampleModel
public int getSampleSize(int band)
getSampleSize
在类别
SampleModel
band
- 指定乐队
public int getOffset(int x, int y)
x
- 指定像素的X坐标
y
- 指定像素的Y坐标
public int getBitOffset(int x)
x
像素的偏移量返回到其存储的数据元素中。
所有扫描线的偏移量相同。
x
- 指定的像素
public int getScanlineStride()
MultiPixelPackedSampleModel
。
public int getPixelBitStride()
pixelBitStride
的
MultiPixelPackedSampleModel
。
public int getDataBitOffset()
dataBitOffset
的
MultiPixelPackedSampleModel
。
public int getTransferType()
getDataElements
和setDataElements
方法传输像素的setDataElements
。
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
public SampleModel createSubsetSampleModel(int[] bands)
MultiPixelPackedSampleModel
本的band子集MultiPixelPackedSampleModel
。
由于MultiPixelPackedSampleModel
只有一个频带,所以频带参数的长度必须为1,表示第0个频带。
createSubsetSampleModel
在类别
SampleModel
bands
- 指定乐队
SampleModel
与这个
MultiPixelPackedSampleModel
一个带的子集。
RasterFormatException
- 如果
RasterFormatException
的频带数不是一个。
IllegalArgumentException
- 如果
w
或
h
不大于0
public int getSample(int x, int y, int b, DataBuffer data)
int
位于(x,y)处的像素的指定带中的样本。
一个ArrayIndexOutOfBoundsException
如果坐标不在边界被抛出。
getSample
在
SampleModel
x
- 指定像素的X坐标
y
- 指定像素的Y坐标
b
- 要返回的频带,假定为0
data
- 包含图像数据的
DataBuffer
ArrayIndexOutOfBoundsException
- 如果指定的坐标不在边界内。
setSample(int, int, int, int, DataBuffer)
public void setSample(int x, int y, int b, int s, DataBuffer data)
DataBuffer
使用int
为输入设置位于(x,y)处的像素的指定频带中的样本。
一个ArrayIndexOutOfBoundsException
如果坐标不在边界被抛出。
setSample
在类别
SampleModel
x
- 指定像素的X坐标
y
- 指定像素的Y坐标
b
- 要返回的频带,假定为0
s
- 输入样本为
int
data
- 存储图像数据的
DataBuffer
ArrayIndexOutOfBoundsException
- 如果坐标不在边界。
getSample(int, int, int, DataBuffer)
public Object getDataElements(int x, int y, Object obj, DataBuffer data)
MultiPixelPackedSampleModel
,该数组具有一个元素,并且该类型是可容纳单个像素的DataBuffer.TYPE_BYTE,DataBuffer.TYPE_USHORT或DataBuffer.TYPE_INT中的最小值。
通常, obj
应传递在如null
,使得Object
被自动创建,并且是正确的原始数据类型。
以下代码说明从DataBuffer
db1
一个像素的数据,其存储布局由MultiPixelPackedSampleModel
mppsm1
为DataBuffer
db2
,其存储布局由MultiPixelPackedSampleModel
mppsm2
。 转移通常比使用getPixel
或setPixel
更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
并没有大到足以容纳像素数据。
getDataElements
在类别
SampleModel
x
- 指定像素的X坐标
y
- 指定像素的Y坐标
obj
- 返回像素数据的原始数组或
null
。
data
- 包含图像数据的
DataBuffer
。
Object
包含指定像素的数据。
ClassCastException
- 如果
obj
不是TransferType类型的原始数组或不是
null
ArrayIndexOutOfBoundsException
- 如果坐标不在边界,或者如果
obj
不是
null
或不够大到不能保持像素数据
setDataElements(int, int, Object, DataBuffer)
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)
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
,到DataBuffer
db2
,其存储布局由描述MultiPixelPackedSampleModel
mppsm2
。 转移通常比使用getPixel
或setPixel
更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
不够大,无法容纳像素数据。
setDataElements
在类别
SampleModel
x
- 像素位置的X坐标
y
- 像素位置的Y坐标
obj
- 包含像素数据的原始数组
data
- 包含图像数据的
DataBuffer
getDataElements(int, int, Object, DataBuffer)
public void setPixel(int x, int y, int[] iArray, DataBuffer data)
DataBuffer
使用int
数组设置像素进行输入。
ArrayIndexOutOfBoundsException
如果坐标不在边界被抛出。
setPixel
在
SampleModel
x
- 像素位置的X坐标
y
- 像素位置的Y坐标
iArray
-
int
数组中的输入像素
data
- 包含图像数据的
DataBuffer
getPixel(int, int, int[], DataBuffer)
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
public int hashCode()
Object
HashMap
提供的。
hashCode
的总合同是:
hashCode
方法必须始终返回相同的整数,前提是修改了对象中equals
比较中的信息。 该整数不需要从一个应用程序的执行到相同应用程序的另一个执行保持一致。 equals(Object)
方法两个对象相等,则在两个对象中的每个对象上调用hashCode
方法必须产生相同的整数结果。 Object.equals(java.lang.Object)
方法不相等,则在两个对象中的每个对象上调用hashCode
方法必须产生不同的整数结果。 但是,程序员应该意识到,为不等对象生成不同的整数结果可能会提高哈希表的性能。 尽可能合理实用,由类别Object
定义的hashCode方法确实为不同对象返回不同的整数。 (这通常通过将对象的内部地址转换为整数来实现,但Java的编程语言不需要此实现技术。)
hashCode
在类别
Object
Object.equals(java.lang.Object)
,
System.identityHashCode(java.lang.Object)