java.lang.Object
java.awt.image.SampleModel
java.awt.image.SinglePixelPackedSampleModel
该类表示像素数据打包,使得构成单个像素的N个样本存储在单个数据数组元素中,每个数据数组元素仅保存一个像素的样本。该类支持
TYPE_BYTE
、TYPE_USHORT
、TYPE_INT
数据类型。所有数据数组元素都驻留在DataBuffer的第一个bank中。提供了访问器方法,以便可以直接操作图像数据。扫描线跨距是给定样本和下一个扫描线中相同列的相应样本之间的数据数组元素数量。位掩码是提取表示像素波段的样本所需的掩码。位偏移是样本表示像素波段的位在数据数组元素中的偏移位。
以下代码说明了从DataBuffer data
中提取像素x,y
的波段b
的位:
int sample = data.getElem(y * scanlineStride + x);
sample = (sample & bitMasks[b]) >>> bitOffsets[b];
-
Field Summary
Fields declared in class java.awt.image.SampleModel
dataType, height, numBands, width
-
Constructor Summary
ConstructorDescriptionSinglePixelPackedSampleModel
(int dataType, int w, int h, int[] bitMasks) 构造具有bitMasks.length波段的SinglePixelPackedSampleModel。SinglePixelPackedSampleModel
(int dataType, int w, int h, int scanlineStride, int[] bitMasks) 构造具有bitMasks.length波段和扫描线跨距等于scanlineStride数据数组元素的SinglePixelPackedSampleModel。 -
Method Summary
Modifier and TypeMethodDescriptioncreateCompatibleSampleModel
(int w, int h) 创建具有指定宽度和高度的新SinglePixelPackedSampleModel。创建与此SinglePixelPackedSampleModel对应的DataBuffer。createSubsetSampleModel
(int[] bands) 创建一个具有此SinglePixelPackedSampleModel波段子集的新SinglePixelPackedSampleModel。int[]
返回所有波段的位掩码。int[]
返回表示像素的数据数组元素中所有波段的位偏移。getDataElements
(int x, int y, Object obj, DataBuffer data) 返回TransferType类型的原始数组中单个像素的数据。int
返回通过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[]
返回所有波段的每个样本的位数。int
getSampleSize
(int band) 返回指定波段的每个样本的位数。int
返回此SinglePixelPackedSampleModel的扫描线跨距。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数组中设置指定像素矩形的指定波段的所有样本。Methods declared in class java.awt.image.SampleModel
getDataElements, getDataType, getHeight, getNumBands, getPixel, getPixel, getPixels, getPixels, getSampleDouble, getSampleFloat, getSamples, getSamples, getTransferType, getWidth, setDataElements, setPixel, setPixel, setPixels, setPixels, setSample, setSample, setSamples, setSamples
-
Constructor Details
-
SinglePixelPackedSampleModel
public SinglePixelPackedSampleModel(int dataType, int w, int h, int[] bitMasks) 构造具有bitMasks.length波段的SinglePixelPackedSampleModel。每个样本存储在其对应位掩码的数据数组元素中的位置。每个位掩码必须是连续的,且掩码不能重叠。超出数据类型容量的位掩码将被截断。- 参数:
-
dataType
- 存储样本的数据类型。 -
w
- 描述图像数据区域的宽度(以像素为单位)。 -
h
- 描述图像数据区域的高度(以像素为单位)。 -
bitMasks
- 所有波段的位掩码。 - 抛出:
-
IllegalArgumentException
- 如果dataType
不是DataBuffer.TYPE_BYTE
、DataBuffer.TYPE_USHORT
或DataBuffer.TYPE_INT
-
SinglePixelPackedSampleModel
public SinglePixelPackedSampleModel(int dataType, int w, int h, int scanlineStride, int[] bitMasks) 构造具有bitMasks.length波段和扫描线跨距等于scanlineStride数据数组元素的SinglePixelPackedSampleModel。每个样本存储在其对应位掩码的数据数组元素中的位置。每个位掩码必须是连续的,且掩码不能重叠。超出数据类型容量的位掩码将被截断。- 参数:
-
dataType
- 存储样本的数据类型。 -
w
- 描述图像数据区域的宽度(以像素为单位)。 -
h
- 描述图像数据区域的高度(以像素为单位)。 -
scanlineStride
- 图像数据的行跨度。 -
bitMasks
- 所有波段的位掩码。 - 抛出:
-
IllegalArgumentException
- 如果w
或h
不大于0 -
IllegalArgumentException
- 如果bitMask
中的任何掩码不是连续的 -
IllegalArgumentException
- 如果dataType
不是DataBuffer.TYPE_BYTE
、DataBuffer.TYPE_USHORT
或DataBuffer.TYPE_INT
-
-
Method Details
-
getNumDataElements
public int getNumDataElements()返回通过getDataElements和setDataElements方法传输一个像素所需的数据元素数量。对于SinglePixelPackedSampleModel,这是一个。- 指定者:
-
getNumDataElements
在类SampleModel
中 - 返回:
- 数据元素的数量。
- 参见:
-
createCompatibleSampleModel
创建具有指定宽度和高度的新SinglePixelPackedSampleModel。新的SinglePixelPackedSampleModel将具有与此SinglePixelPackedSampleModel相同的存储数据类型和位掩码。- 指定者:
-
createCompatibleSampleModel
在类SampleModel
中 - 参数:
-
w
- 结果SampleModel
的宽度 -
h
- 结果SampleModel
的高度 - 返回:
-
具有指定宽度和高度的
SinglePixelPackedSampleModel
。 - 抛出:
-
IllegalArgumentException
- 如果w
或h
不大于0
-
createDataBuffer
创建与此SinglePixelPackedSampleModel对应的DataBuffer。DataBuffer的数据类型和大小将与此SinglePixelPackedSampleModel一致。DataBuffer将具有单个bank。- 指定者:
-
createDataBuffer
在类SampleModel
中 - 返回:
-
与此
SampleModel
对应的DataBuffer
。
-
getSampleSize
public int[] getSampleSize()返回所有波段的每个样本的位数。- 指定者:
-
getSampleSize
在类SampleModel
中 - 返回:
- 所有波段的样本大小。
-
getSampleSize
public int getSampleSize(int band) 返回指定波段的每个样本的位数。- 指定者:
-
getSampleSize
在类SampleModel
中 - 参数:
-
band
- 指定的波段 - 返回:
- 指定波段的样本大小。
-
getOffset
public int getOffset(int x, int y) 返回像素(x,y)的偏移量(以数据数组元素为单位)。包含像素的数据元素可以从具有SinglePixelPackedSampleModel sppsm
的DataBufferdata
中检索: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
创建一个新的SinglePixelPackedSampleModel,其中包含此SinglePixelPackedSampleModel的一部分波段。新的SinglePixelPackedSampleModel可以与现有的SinglePixelPackedSampleModel可以使用的任何DataBuffer一起使用。新的SinglePixelPackedSampleModel/DataBuffer组合将表示具有原始SinglePixelPackedSampleModel/DataBuffer组合的波段子集的图像。- 指定者:
-
createSubsetSampleModel
在类SampleModel
- 参数:
-
bands
- 此SampleModel
的波段子集 - 返回:
-
一个具有此
SampleModel
波段子集的SampleModel
。 - 抛出:
-
RasterFormatException
- 如果bands参数的长度大于样本模型中的波段数。
-
getDataElements
返回以TransferType类型的原始数组中的单个像素的数据。对于SinglePixelPackedSampleModel,数组将只有一个元素,并且类型将与存储数据类型相同。通常,应将obj传递为null,以便自动创建对象,并且将是正确的原始数据类型。以下代码说明了从由SinglePixelPackedSampleModel
sppsm1
描述的DataBufferdb1
中的一个像素传输数据到由SinglePixelPackedSampleModelsppsm2
描述的DataBufferdb2
的过程。传输通常比使用getPixel/setPixel更有效。SinglePixelPackedSampleModel sppsm1, sppsm2; DataBufferInt db1, db2; sppsm2.setDataElements(x, y, sppsm1.getDataElements(x, y, null, db1), db2);
如果SampleModels具有相同数量的波段,相应波段具有相同数量的每个样本的位数,并且TransferTypes相同,则使用getDataElements/setDataElements在两个DataBuffer/SampleModel对之间传输是合法的。如果obj非null,则它应该是TransferType类型的原始数组。否则,将抛出ClassCastException。如果坐标不在范围内,或者obj不足以容纳像素数据,则可能会抛出ArrayIndexOutOfBoundsException。
- 指定者:
-
getDataElements
在类SampleModel
- 参数:
-
x
- 像素位置的X坐标。 -
y
- 像素位置的Y坐标。 -
obj
- 如果非null,则返回像素数据的原始数组。 -
data
- 包含图像数据的DataBuffer。 - 返回:
- 指定像素的数据。
- 参见:
-
getPixel
返回指定像素的所有样本的int数组。如果坐标不在范围内,则可能会抛出ArrayIndexOutOfBoundsException。- 覆盖:
-
getPixel
在类SampleModel
- 参数:
-
x
- 像素位置的X坐标。 -
y
- 像素位置的Y坐标。 -
iArray
- 如果非null,则将样本返回到此数组中 -
data
- 包含图像数据的DataBuffer。 - 返回:
- 指定像素的所有样本。
- 参见:
-
getPixels
返回指定像素矩形中所有样本的int数组,每个数组元素一个样本。如果坐标不在范围内,则可能会抛出ArrayIndexOutOfBoundsException。- 覆盖:
-
getPixels
在类SampleModel
- 参数:
-
x
- 左上角像素位置的X坐标。 -
y
- 左上角像素位置的Y坐标。 -
w
- 像素矩形的宽度。 -
h
- 像素矩形的高度。 -
iArray
- 如果非null,则将样本返回到此数组中。 -
data
- 包含图像数据的DataBuffer。 - 返回:
- 指定像素区域的所有样本。
- 参见:
-
getSample
返回位于(x,y)处的像素的指定波段的样本作为int。如果坐标不在范围内,则可能会抛出ArrayIndexOutOfBoundsException。- 指定者:
-
getSample
在类SampleModel
- 参数:
-
x
- 像素位置的X坐标。 -
y
- 像素位置的Y坐标。 -
b
- 要返回的波段。 -
data
- 包含图像数据的DataBuffer。 - 返回:
- 指定像素的指定波段的样本。
- 参见:
-
getSamples
返回指定像素矩形中指定波段的所有样本的int数组,每个数组元素一个样本。如果坐标不在范围内,则可能会抛出ArrayIndexOutOfBoundsException。- 覆盖:
-
getSamples
在类SampleModel
- 参数:
-
x
- 左上角像素位置的X坐标。 -
y
- 左上角像素位置的Y坐标。 -
w
- 像素矩形的宽度。 -
h
- 像素矩形的高度。 -
b
- 要返回的波段。 -
iArray
- 如果非null,则将样本返回到此数组中。 -
data
- 包含图像数据的DataBuffer。 - 返回:
- 指定像素区域的指定波段的所有样本。
- 参见:
-
setDataElements
从TransferType类型的原始数组中设置指定DataBuffer中的单个像素的数据。对于SinglePixelPackedSampleModel,数组的第一个元素将包含有效数据,并且数组的类型必须与SinglePixelPackedSampleModel的存储数据类型相同。以下代码说明了从由SinglePixelPackedSampleModel
sppsm1
描述的DataBufferdb1
中的一个像素传输数据到由SinglePixelPackedSampleModelsppsm2
描述的DataBufferdb2
的过程。传输通常比使用getPixel/setPixel更有效。SinglePixelPackedSampleModel sppsm1, sppsm2; DataBufferInt db1, db2; sppsm2.setDataElements(x, y, sppsm1.getDataElements(x, y, null, db1), db2);
如果SampleModels具有相同数量的波段,相应波段具有相同数量的每个样本的位数,并且TransferTypes相同,则使用getDataElements/setDataElements在两个DataBuffer/SampleModel对之间传输是合法的。obj必须是TransferType类型的原始数组。否则,将抛出ClassCastException。如果坐标不在范围内,或者obj不足以容纳像素数据,则可能会抛出ArrayIndexOutOfBoundsException。
- 指定者:
-
setDataElements
在类SampleModel
- 参数:
-
x
- 像素位置的X坐标。 -
y
- 像素位置的Y坐标。 -
obj
- 包含像素数据的原始数组。 -
data
- 包含图像数据的DataBuffer。 - 参见:
-
setPixel
使用输入的int数组设置DataBuffer中的像素。如果坐标不在范围内,则可能会抛出ArrayIndexOutOfBoundsException。- 覆盖:
-
setPixel
在类SampleModel
- 参数:
-
x
- 像素位置的X坐标。 -
y
- 像素位置的Y坐标。 -
iArray
- 包含输入样本的int数组。 -
data
- 包含图像数据的DataBuffer。 - 参见:
-
setPixels
将包含每个数组元素一个样本的int数组中的像素矩形的所有样本设置为指定值。如果坐标超出范围,可能会抛出ArrayIndexOutOfBoundsException异常。- 覆盖:
-
setPixels
在类SampleModel
- 参数:
-
x
- 左上角像素位置的X坐标。 -
y
- 左上角像素位置的Y坐标。 -
w
- 像素矩形的宽度。 -
h
- 像素矩形的高度。 -
iArray
- int数组中的输入样本。 -
data
- 包含图像数据的DataBuffer。 - 参见:
-
setSample
使用int类型的输入,在DataBuffer中为位于(x,y)处的像素的指定波段设置样本。如果坐标超出范围,可能会抛出ArrayIndexOutOfBoundsException异常。- 指定者:
-
setSample
在类SampleModel
- 参数:
-
x
- 像素位置的X坐标。 -
y
- 像素位置的Y坐标。 -
b
- 要设置的波段。 -
s
- 作为int的输入样本。 -
data
- 包含图像数据的DataBuffer。 - 参见:
-
setSamples
将包含每个数组元素一个样本的int数组中的指定矩形像素的指定波段的所有样本设置为指定值。如果坐标超出范围,可能会抛出ArrayIndexOutOfBoundsException异常。- 覆盖:
-
setSamples
在类SampleModel
- 参数:
-
x
- 左上角像素位置的X坐标。 -
y
- 左上角像素位置的Y坐标。 -
w
- 像素矩形的宽度。 -
h
- 像素矩形的高度。 -
b
- 要设置的波段。 -
iArray
- int数组中的输入样本。 -
data
- 包含图像数据的DataBuffer。 - 参见:
-