- 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);
-
-
字段汇总
-
声明的属性在类 java.awt.image.SampleModel
dataType, height, numBands, width
-
-
构造方法摘要
构造方法 构造器 描述 MultiPixelPackedSampleModel(int dataType, int w, int h, int numberOfBits)
构造一个具有指定数据类型,宽度,高度和每像素位数的MultiPixelPackedSampleModel
。MultiPixelPackedSampleModel(int dataType, int w, int h, int numberOfBits, int scanlineStride, int dataBitOffset)
构造一个具有指定数据类型,宽度,高度,每像素位数,扫描行间距和数据位偏移的MultiPixelPackedSampleModel
。
-
方法摘要
所有方法 实例方法 具体的方法 变量和类型 方法 描述 SampleModel
createCompatibleSampleModel(int w, int h)
创建具有指定宽度和高度的新MultiPixelPackedSampleModel
。DataBuffer
createDataBuffer()
创建一个DataBuffer
,对应于此MultiPixelPackedSampleModel
。SampleModel
createSubsetSampleModel(int[] bands)
创建一个新的MultiPixelPackedSampleModel
这个的band子集MultiPixelPackedSampleModel
。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
数组的第一个元素中指定的单个band像素。int
getPixelBitStride()
以位为单位返回像素位跨距。int
getSample(int x, int y, int b, DataBuffer data)
对于位于(x,y)的像素,返回指定波段中的样本的int
。int[]
getSampleSize()
返回所有band的每个样本的位数。int
getSampleSize(int band)
返回指定band的每个样本的位数。int
getScanlineStride()
返回扫描线步幅。int
getTransferType()
返回用于通过getDataElements
和setDataElements
方法传输像素的TransferType。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)
使用int
为输入设置DataBuffer
位于(x,y)的像素的指定波段中的样本。-
声明方法的类 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
- 图像数据的行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()
返回所有band的每个样本的位数。- Specified by:
-
getSampleSize
类SampleModel
- 结果
- 每个样本的位数。
-
getSampleSize
public int getSampleSize(int band)
返回指定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
这个的band子集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)
对于位于(x,y)的像素,返回指定波段中的样本的int
。 如果坐标不在边界内,则抛出ArrayIndexOutOfBoundsException
。- Specified by:
-
getSample
类SampleModel
- 参数
-
x
- 指定像素的X坐标 -
y
- 指定像素的Y坐标 -
b
- 要返回的波段,假定为0 -
data
- 包含图像数据的DataBuffer
- 结果
- 包含指定像素的样本的指定band。
- 异常
-
ArrayIndexOutOfBoundsException
- 如果指定的坐标不在边界内。 - 另请参见:
-
setSample(int, int, int, int, DataBuffer)
-
setSample
public void setSample(int x, int y, int b, int s, DataBuffer data)
使用int
为输入设置DataBuffer
位于(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
mppsm1
描述)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
具有相同数量的频带,相应的频带每个样本具有相同的位数,并且TransferTypes相同,则使用getDataElements
或setDataElements
在两个DataBuffer/SampleModel
对之间进行传输是合法的。如果
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
数组的第一个元素中指定的单个band像素。 如果坐标不在边界内,则抛出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)
从TransferType类型的基本数组中为指定的DataBuffer
的单个像素设置数据。 对于MultiPixelPackedSampleModel
,只有数组的第一个元素包含有效数据,并且类型必须是可以容纳单个像素的DataBuffer.TYPE_BYTE,DataBuffer.TYPE_USHORT或DataBuffer.TYPE_INT中最小的一个。以下代码说明了从
DataBuffer db1
传输一个像素的数据,其存储布局由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);
如果SampleModel
对象具有相同数量的波段,相应的波段每个采样具有相同的比特数,并且TransferTypes相同,则使用getDataElements
或setDataElements
在两个DataBuffer/SampleModel
对之间进行传输是合法的。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)
-
-