public class SinglePixelPackedSampleModel extends SampleModel
TYPE_BYTE
, TYPE_USHORT
, TYPE_INT
的数据类型。
所有数据数组元素驻留在DataBuffer的第一个存储区中。
提供存取方法,以便可以直接操纵图像数据。
扫描线步幅是给定样本与下一个扫描线同一列中相应样本之间的数据数组元素数。
位掩码是提取表示像素的带的样本所需的掩码。
位偏移是表示像素的带的样本的数据数组元素中的位的偏移量。
下面的代码说明提取表示带样本的位b
用于像素x,y
从DataBuffer中data
:
int sample = data.getElem(y * scanlineStride + x); sample = (sample & bitMasks[b]) >>> bitOffsets[b];
dataType, height, numBands, width
Constructor and Description |
---|
SinglePixelPackedSampleModel(int dataType, int w, int h, int[] bitMasks)
构造一个具有bitMasks.length带的SinglePixelPackedSampleModel。
|
SinglePixelPackedSampleModel(int dataType, int w, int h, int scanlineStride, int[] bitMasks)
构造一个SinglePixelPackedSampleModel,其bitMasks.length带和扫描线步长等于scanlineStride数据数组元素。
|
Modifier and Type | Method and Description |
---|---|
SampleModel |
createCompatibleSampleModel(int w, int h)
创建一个具有指定宽度和高度的新SinglePixelPackedSampleModel。
|
DataBuffer |
createDataBuffer()
创建与此SinglePixelPackedSampleModel对应的DataBuffer。
|
SampleModel |
createSubsetSampleModel(int[] bands)
这将创建一个新的SinglePixelPackedSampleModel与该SinglePixelPackedSampleModel的频带的子集。
|
boolean |
equals(Object o)
指示一些其他对象是否等于此。
|
int[] |
getBitMasks()
返回所有频段的位掩码。
|
int[] |
getBitOffsets()
将位偏移返回到表示所有频带的像素的数据数组元素中。
|
Object |
getDataElements(int x, int y, Object obj, DataBuffer data)
返回TransferType类型的原始数组中单个像素的数据。
|
int |
getNumDataElements()
返回通过getDataElements和setDataElements方法传输一个像素所需的数据元素数。
|
int |
getOffset(int x, int y)
返回像素(x,y)的偏移(在数据数组元素中)。
|
int[] |
getPixel(int x, int y, int[] iArray, DataBuffer data)
返回int数组中指定像素的所有样本。
|
int[] |
getPixels(int x, int y, int w, int h, int[] iArray, DataBuffer data)
返回int数组中指定的像素矩形的所有样本,每个数组元素一个样本。
|
int |
getSample(int x, int y, int b, DataBuffer data)
返回为位于(x,y)处的像素的指定带中的样本int。
|
int[] |
getSamples(int x, int y, int w, int h, int b, int[] iArray, DataBuffer data)
返回int数组中指定的像素矩形的指定带的样本,每个数组元素一个样本。
|
int[] |
getSampleSize()
返回所有频带的每个样本的位数。
|
int |
getSampleSize(int band)
返回指定频带的每个样本的位数。
|
int |
getScanlineStride()
返回此SinglePixelPackedSampleModel的扫描线步幅。
|
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 |
setPixels(int x, int y, int w, int h, int[] iArray, DataBuffer data)
从包含每个数组元素一个样本的int数组中设置一个像素矩形的所有样本。
|
void |
setSample(int x, int y, int b, int s, DataBuffer data)
使用int作为输入,为DataBuffer中位于(x,y)处的像素的指定波段设置一个样本。
|
void |
setSamples(int x, int y, int w, int h, int b, int[] iArray, DataBuffer data)
从包含每个数组元素一个样本的int数组中为指定的像素矩形设置指定带中的样本。
|
getDataElements, getDataType, getHeight, getNumBands, getPixel, getPixel, getPixels, getPixels, getSampleDouble, getSampleFloat, getSamples, getSamples, getTransferType, getWidth, setDataElements, setPixel, setPixel, setPixels, setPixels, setSample, setSample, setSamples, setSamples
public SinglePixelPackedSampleModel(int dataType, int w, int h, int[] bitMasks)
dataType
- 存储样本的数据类型。
w
- 描述的图像数据的区域的宽度(以像素为单位)。
h
- 描述的图像数据区域的高度(以像素为单位)。
bitMasks
- 所有频段的位掩码。
IllegalArgumentException
-如果
dataType
不是非此即彼
DataBuffer.TYPE_BYTE
,
DataBuffer.TYPE_USHORT
,或
DataBuffer.TYPE_INT
public SinglePixelPackedSampleModel(int dataType, int w, int h, int scanlineStride, int[] bitMasks)
dataType
- 存储样本的数据类型。
w
- 描述的图像数据区域的宽度(以像素为单位)。
h
- 描述的图像数据区域的高度(以像素为单位)。
scanlineStride
- 图像数据的行走。
bitMasks
- 所有频段的位掩码。
IllegalArgumentException
- 如果
w
或
h
不大于0
IllegalArgumentException
- 如果
bitMask
中的任何掩码不连续
IllegalArgumentException
-如果
dataType
不是非此即彼
DataBuffer.TYPE_BYTE
,
DataBuffer.TYPE_USHORT
,或
DataBuffer.TYPE_INT
public int getNumDataElements()
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 SampleModel createCompatibleSampleModel(int w, int h)
createCompatibleSampleModel
在
SampleModel
类
w
- 得到的宽度
SampleModel
h
- 由此产生的高度
SampleModel
SinglePixelPackedSampleModel
具有指定的宽度和高度。
IllegalArgumentException
- 如果
w
或
h
不大于0
public DataBuffer createDataBuffer()
createDataBuffer
在
SampleModel
类
DataBuffer
对应这个
SampleModel
。
public int[] getSampleSize()
getSampleSize
在
SampleModel
类
public int getSampleSize(int band)
getSampleSize
在
SampleModel
band
- 指定的乐队
public int getOffset(int x, int y)
x,y
可以从DataBuffer中检索data
与SinglePixelPackedSampleModel,它sppsm
为:
data.getElem(sppsm.getOffset(x, y));
x
- 指定像素的X坐标
y
- 指定像素的Y坐标
public int[] getBitOffsets()
public int[] getBitMasks()
public int getScanlineStride()
SinglePixelPackedSampleModel
。
public SampleModel createSubsetSampleModel(int[] bands)
createSubsetSampleModel
在
SampleModel
bands
- 这个
SampleModel
的频带子集
SampleModel
与这个
SampleModel
一个子带。
RasterFormatException
- 如果频带参数的长度大于样本模型中的频带数。
public Object getDataElements(int x, int y, Object obj, DataBuffer data)
以下代码说明了将DataBuffer db1
(其存储布局由SinglePixelPackedSampleModel sppsm1
)传送到DataBuffer db2
的一个像素的数据,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。
getDataElements
在
SampleModel
x
- 像素位置的X坐标。
y
- 像素位置的Y坐标。
obj
- 如果非空,则返回像素数据的原始数组。
data
- 包含图像数据的DataBuffer。
setDataElements(int, int, Object, DataBuffer)
public int[] getPixel(int x, int y, int[] iArray, DataBuffer data)
getPixel
在
SampleModel
x
- 像素位置的X坐标。
y
- 像素位置的Y坐标。
iArray
- 如果非空,则返回此数组中的样本
data
- 包含图像数据的DataBuffer。
setPixel(int, int, int[], DataBuffer)
public int[] getPixels(int x, int y, int w, int h, int[] iArray, DataBuffer data)
getPixels
在
SampleModel
类
x
- 左上角像素位置的X坐标。
y
- 左上角像素位置的Y坐标。
w
- 像素矩形的宽度。
h
- 像素矩形的高度。
iArray
- 如果非空,则返回此数组中的样本。
data
- 包含图像数据的DataBuffer。
setPixels(int, int, int, int, int[], DataBuffer)
public int getSample(int x, int y, int b, DataBuffer data)
getSample
在
SampleModel
x
- 像素位置的X坐标。
y
- 像素位置的Y坐标。
b
- 乐队返回。
data
- 包含图像数据的DataBuffer。
setSample(int, int, int, int, DataBuffer)
public int[] getSamples(int x, int y, int w, int h, int b, int[] iArray, DataBuffer data)
getSamples
在
SampleModel
x
- 左上角像素位置的X坐标。
y
- 左上角像素位置的Y坐标。
w
- 像素矩形的宽度。
h
- 像素矩形的高度。
b
- 乐队返回。
iArray
- 如果非空,则返回此数组中的样本。
data
- 包含图像数据的DataBuffer。
setSamples(int, int, int, int, int, int[], DataBuffer)
public void setDataElements(int x, int y, Object obj, DataBuffer data)
以下代码说明了将DataBuffer db1
(其存储布局由SinglePixelPackedSampleModel sppsm1
)传送到DataBuffer db2
的一个像素的数据,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。
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)
setPixel
在
SampleModel
x
- 像素位置的X坐标。
y
- 像素位置的Y坐标。
iArray
- 在int数组中输入样本。
data
- 包含图像数据的DataBuffer。
getPixel(int, int, int[], DataBuffer)
public void setPixels(int x, int y, int w, int h, int[] iArray, DataBuffer data)
setPixels
在
SampleModel
x
- 左上角像素位置的X坐标。
y
- 左上角像素位置的Y坐标。
w
- 像素矩形的宽度。
h
- 像素矩形的高度。
iArray
- int数组中的输入样本。
data
- 包含图像数据的DataBuffer。
getPixels(int, int, int, int, int[], DataBuffer)
public void setSample(int x, int y, int b, int s, DataBuffer data)
setSample
在
SampleModel
x
- 像素位置的X坐标。
y
- 像素位置的Y坐标。
b
- 乐队设置。
s
- 输入样本为int。
data
- 包含图像数据的DataBuffer。
getSample(int, int, int, DataBuffer)
public void setSamples(int x, int y, int w, int h, int b, int[] iArray, DataBuffer data)
setSamples
在
SampleModel
x
- 左上角像素位置的X坐标。
y
- 左上角像素位置的Y坐标。
w
- 像素矩形的宽度。
h
- 像素矩形的高度。
b
- 乐队设置。
iArray
- int数组中的输入样本。
data
- 包含图像数据的DataBuffer。
getSamples(int, int, int, 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)
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.