JavaTM 2 Platform
Standard Ed. 6

java.awt.image
類別 MultiPixelPackedSampleModel

java.lang.Object
  繼承者 java.awt.image.SampleModel
      繼承者 java.awt.image.MultiPixelPackedSampleModel

public class MultiPixelPackedSampleModel
extends SampleModel

MultiPixelPackedSampleModel 類別表示單 band 圖像,能夠將多個單樣本像素打包到一個資料元素中。像素不能跨越資料元素。資料型別可以是 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()
          創建一個與此 MultiPixelPackedSampleModel 對應的 DataBuffer
 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()
          返回通過 getDataElements(int, int, java.lang.Object, java.awt.image.DataBuffer)setDataElements(int, int, java.lang.Object, java.awt.image.DataBuffer) 方法傳輸一個像素所需的資料元素數。
 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)
          以 int 形式返回指定 band 中對應於 (x, y) 處像素的樣本。
 int[] getSampleSize()
          返回所有 band 的每樣本位數。
 int getSampleSize(int band)
          返回指定 band 的每樣本位數。
 int getScanlineStride()
          返回掃瞄行的間距。
 int getTransferType()
          返回通過 getDataElementssetDataElements 方法傳輸像素所使用的 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)
          使用輸入的 int,設置指定 band 中對應於 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
 
從類別 java.lang.Object 繼承的方法
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait
 

建構子詳細資訊

MultiPixelPackedSampleModel

public MultiPixelPackedSampleModel(int dataType,
                                   int w,
                                   int h,
                                   int numberOfBits)
建構一個具有指定資料型別、寬度、高度和每像素位數的 MultiPixelPackedSampleModel

參數:
dataType - 存儲樣本的資料型別
w - 所描述的圖像資料區域的寬度,以像素為單位
h - 所描述的圖像資料區域的高度,以像素為單位
numberOfBits - 每個像素的位數
拋出:
IllegalArgumentException - 如果 dataType 不是 DataBuffer.TYPE_BYTEDataBuffer.TYPE_USHORTDataBuffer.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 - 如果 wh 不大於 0
IllegalArgumentException - 如果 dataType 不是 DataBuffer.TYPE_BYTEDataBuffer.TYPE_USHORTDataBuffer.TYPE_INT
方法詳細資訊

createCompatibleSampleModel

public SampleModel createCompatibleSampleModel(int w,
                                               int h)
建構一個具有指定寬度和高度的新 MultiPixelPackedSampleModel。這個新 MultiPixelPackedSampleModel 具有與此 MultiPixelPackedSampleModel 相同的存儲資料型別和每像素位數。

指定者:
類別 SampleModel 中的 createCompatibleSampleModel
參數:
w - 指定的寬度
h - 指定的高度
返回:
一個 SampleModel,具有指定寬度和高度,並且具有與此 MultiPixelPackedSampleModel 相同的存儲資料型別和每像素位數。
拋出:
IllegalArgumentException - 如果 wh 不大於 0

createDataBuffer

public DataBuffer createDataBuffer()
創建一個與此 MultiPixelPackedSampleModel 對應的 DataBuffer。該 DataBuffer 物件的資料型別和大小與此 MultiPixelPackedSampleModel 一致。DataBuffer 具有單個存儲單元。

指定者:
類別 SampleModel 中的 createDataBuffer
返回:
資料型別和大小與此 MultiPixelPackedSampleModel 相同的 DataBuffer

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,該值是一。

指定者:
類別 SampleModel 中的 getNumDataElements
返回:
資料元素數。
另請參見:
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 的每樣本位數。

指定者:
類別 SampleModel 中的 getSampleSize
返回:
每個樣本的位數。

getSampleSize

public int getSampleSize(int band)
返回指定 band 的每樣本位數。

指定者:
類別 SampleModel 中的 getSampleSize
參數:
band - 指定的 band
返回:
指定 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()
返回像素位間距,以位為單位。此值與每像素位數相同。

返回:
MultiPixelPackedSampleModelpixelBitStride

getDataBitOffset

public int getDataBitOffset()
返回資料位的偏移量(以位為單位)。

返回:
MultiPixelPackedSampleModeldataBitOffset

getTransferType

public int getTransferType()
返回通過 getDataElementssetDataElements 方法傳輸像素所使用的 TransferType。該 TransferType 可能與存儲 DataType 相同,也可能不同。TransferType 是 DataBuffer.TYPE_BYTE、DataBuffer.TYPE_USHORT 或 DataBuffer.TYPE_INT 之一。

覆寫:
類別 SampleModel 中的 getTransferType
返回:
transfertype。
另請參見:
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 只有一個 band,所以 bands 參數的長度必須為 1,指示第 0 個 band。

指定者:
類別 SampleModel 中的 createSubsetSampleModel
參數:
bands - 指定的 band
返回:
具有此 MultiPixelPackedSampleModel band 子集的新 SampleModel
拋出:
RasterFormatException - 如果請求的 band 數不是 1。
IllegalArgumentException - 如果 wh 不大於 0

getSample

public int getSample(int x,
                     int y,
                     int b,
                     DataBuffer data)
int 形式返回指定 band 中對應於 (x, y) 處像素的樣本。如果坐標超出了範圍,則拋出 ArrayIndexOutOfBoundsException

指定者:
類別 SampleModel 中的 getSample
參數:
x - 指定像素的 X 坐標
y - 指定像素的 Y 坐標
b - 返回的 band,假定為 0
data - 套件含圖像資料的 DataBuffer
返回:
包含指定像素樣本的指定 band
拋出:
ArrayIndexOutOfBoundException - 如果指定的坐標超出了範圍。
另請參見:
setSample(int, int, int, int, DataBuffer)

setSample

public void setSample(int x,
                      int y,
                      int b,
                      int s,
                      DataBuffer data)
使用輸入的 int,設置指定 band 中對應於 DataBuffer (x,y) 處像素的樣本。如果坐標超出了範圍,則拋出 ArrayIndexOutOfBoundsException

指定者:
類別 SampleModel 中的 setSample
參數:
x - 指定像素的 X 坐標
y - 指定像素的 Y 坐標
b - 返回的 band,假定為 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 描述)傳輸到 DataBuffer db2(其存儲佈局由 MultiPixelPackedSampleModel mppsm2 描述)。該傳輸通常比使用 getPixelsetPixel 更為高效。

             MultiPixelPackedSampleModel mppsm1, mppsm2;
             DataBufferInt db1, db2;
             mppsm2.setDataElements(x, y, mppsm1.getDataElements(x, y, null,
                              db1), db2);
 
如果兩個 SampleModel 具有相同的 band 數,相應的 band 具有相同的每樣本位數,並且 TransferType 也相同,則使用 getDataElementssetDataElements 在兩個 DataBuffer/SampleModel 對之間進行傳輸是合法的。

如果 obj 不為 null,則它應是一個 TransferType 型別的基本陣列。否則將拋出 ClassCastException。如果坐標超出了範圍,或者 obj 不為 null 並且其大小不足以保存該像素資料,則拋出 ArrayIndexOutOfBoundsException

指定者:
類別 SampleModel 中的 getDataElements
參數:
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

覆寫:
類別 SampleModel 中的 getPixel
參數:
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 所描述)。該傳輸通常比使用 getPixelsetPixel 更為高效。

             MultiPixelPackedSampleModel mppsm1, mppsm2;
             DataBufferInt db1, db2;
             mppsm2.setDataElements(x, y, mppsm1.getDataElements(x, y, null,
                              db1), db2);
 
如果兩個 SampleModel 物件具有相同的 band 數,相應的 band 具有相同的每樣本位數,並且 TransferType 也相同,則使用 getDataElementssetDataElements 在兩個 DataBuffer/SampleModel 對之間進行傳輸是合法的。

obj 必須是 TransferType 型別的基本陣列。否則將拋出 ClassCastException。如果坐標超出了範圍,或者 obj 大小不足以保存該像素資料,則拋出 ArrayIndexOutOfBoundsException

指定者:
類別 SampleModel 中的 setDataElements
參數:
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

覆寫:
類別 SampleModel 中的 setPixel
參數:
x - 像素位置的 X 坐標
y - 像素位置的 Y 坐標
iArray - int 陣列中的輸入像素
data - 套件含圖像資料的 DataBuffer
另請參見:
getPixel(int, int, int[], DataBuffer)

equals

public boolean equals(Object o)
從類別 Object 複製的描述
指示其他某個物件是否與此物件「相等」。

equals 方法在非空(null)物件參考上實作相等關係:

Object 類別的 equals 方法實作物件上差別可能性最大的相等關係;即,對於任何非空(null)參考值 xy,當且僅當 xy 參考同一個物件時,此方法才返回 truex == y 具有值 true)。

注意:當此方法被覆寫時,通常有必要覆寫 hashCode 方法,以維護 hashCode 方法的常規協定,該協定宣告相等物件必須具有相等的雜湊碼。

覆寫:
類別 Object 中的 equals
參數:
o - 要與之比較的參考物件。
返回:
如果此物件與 obj 參數相同,則返回 true;否則返回 false
另請參見:
Object.hashCode(), Hashtable

hashCode

public int hashCode()
從類別 Object 複製的描述
返回該物件的雜湊碼值。支持此方法是為了提高雜湊表(例如 java.util.Hashtable 提供的雜湊表)的性能。

hashCode 的常規協定是:

實際上,由 Object 類別定義的 hashCode 方法確實會針對不同的物件返回不同的整數。(這一般是通過將該物件的內部位址轉換成一個整數來實作的,但是 JavaTM 程式語言不需要這種實作技巧。)

覆寫:
類別 Object 中的 hashCode
返回:
此物件的一個雜湊碼值。
另請參見:
Object.equals(java.lang.Object), Hashtable

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only