モジュール java.desktop
パッケージ java.awt.image

クラスMultiPixelPackedSampleModel

java.lang.Object
java.awt.image.SampleModel
java.awt.image.MultiPixelPackedSampleModel

public class MultiPixelPackedSampleModel
extends SampleModel
MultiPixelPackedSampleModelクラスは、単一バンド化されたイメージを表現し、複数の単一サンプル・ピクセルを1つのデータ要素にパックできます。 ピクセルは、複数のデータ要素にまたがることはできません。 データ型は、DataBuffer.TYPE_BYTE、DataBuffer.TYPE_USHORT、またはDataBuffer.TYPE_INTです。 各ピクセルは2のべき乗のビット数でなければならず、2のべき乗個のピクセルが、1つのデータ要素にぴったり収まらなければいけません。 ピクセル・ビット・ストライドは、1ピクセルあたりのビット数と同じです。 走査線ストライドはデータ要素内にあり、最後のいくつかのデータ要素が未使用のピクセルでパディングされます。 データ・ビット・オフセットは、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);
 

  • コンストラクタの詳細

    • MultiPixelPackedSampleModel

      public MultiPixelPackedSampleModel​(int dataType, int w, int h, int numberOfBits)
      指定されたデータ型、幅、高さ、および1ピクセルあたりのビット数を持つMultiPixelPackedSampleModelを構築します。
      パラメータ:
      dataType - サンプル格納用のデータ形式
      w - 記述されるイメージ・データの領域の幅(ピクセル単位)
      h - 記述されるイメージ・データの領域の高さ(ピクセル単位)
      numberOfBits - ピクセルごとのビット数
      例外:
      IllegalArgumentException - dataTypeDataBuffer.TYPE_BYTEDataBuffer.TYPE_USHORT、またはDataBuffer.TYPE_INTのいずれでもない場合
    • MultiPixelPackedSampleModel

      public MultiPixelPackedSampleModel​(int dataType, int w, int h, int numberOfBits, int scanlineStride, int dataBitOffset)
      指定されたデータ型、幅、高さ、1ピクセルあたりのビット数、走査線ストライド、およびデータ・ビット・オフセットを持つMultiPixelPackedSampleModelを構築します。
      パラメータ:
      dataType - サンプル格納用のデータ形式
      w - 記述されるイメージ・データの領域の幅(ピクセル単位)
      h - 記述されるイメージ・データの領域の高さ(ピクセル単位)
      numberOfBits - ピクセルごとのビット数
      scanlineStride - イメージ・データの走査線ストライド
      dataBitOffset - 記述されているイメージ・データ領域のデータ・ビット・オフセット
      例外:
      RasterFormatException - 1ピクセルあたりのビット数が2のべき乗でない場合、あるいは2のべき乗個のピクセルが1データ要素に収まらない場合。
      IllegalArgumentException - wまたはhが0以下である場合
      IllegalArgumentException - dataTypeDataBuffer.TYPE_BYTEDataBuffer.TYPE_USHORT、またはDataBuffer.TYPE_INTのいずれでもない場合
  • メソッドの詳細

    • createCompatibleSampleModel

      public SampleModel createCompatibleSampleModel​(int w, int h)
      指定された幅と高さを持つ新しいMultiPixelPackedSampleModelを作成します。 新しいMultiPixelPackedSampleModelのストレージ・データ型と1ピクセルあたりのビット数は、このMultiPixelPackedSampleModelと同じです。
      定義:
      createCompatibleSampleModel、クラス: SampleModel
      パラメータ:
      w - 指定された幅
      h - 指定された高さ
      戻り値:
      指定された幅と高さを持ち、このMultiPixelPackedSampleModelとストレージ・データ型および1ピクセルあたりのビット数が同じSampleModel
      例外:
      IllegalArgumentException - wまたはhが0以下である場合
    • createDataBuffer

      public DataBuffer createDataBuffer()
      このMultiPixelPackedSampleModelに対応するDataBufferを作成します。 DataBufferオブジェクトのデータ型とサイズは、このMultiPixelPackedSampleModelと同じです。 DataBufferは1つのバンクを持ちます。
      定義:
      createDataBuffer、クラス: SampleModel
      戻り値:
      この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)メソッドを使って1ピクセル転送するのに必要なデータ要素の数を返します。 MultiPixelPackedSampleModelの場合は1になります。
      定義:
      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()
      すべてのバンドのサンプルあたりのビット数を返します。
      定義:
      getSampleSize、クラス: SampleModel
      戻り値:
      サンプルごとのビット数。
    • getSampleSize

      public int getSampleSize​(int band)
      指定されたバンドのサンプルあたりのビット数を返します。
      定義:
      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()
      ピクセル・ビット・ストライドをビット数で返します。 この値は、1ピクセルあたりのビット数と同じです。
      戻り値:
      このMultiPixelPackedSampleModelpixelBitStride
    • getDataBitOffset

      public int getDataBitOffset()
      データ・ビット・オフセットをビット数で返します。
      戻り値:
      このMultiPixelPackedSampleModeldataBitOffset
    • getTransferType

      public int getTransferType()
      getDataElementsメソッドとsetDataElementsメソッドによりピクセルを転送するために使うTransferTypeを返します。 TransferTypeは、ストレージ・データ型と同じでも、異なっていてもかまいません。 TransferTypeは、DataBuffer.TYPE_BYTE、DataBuffer.TYPE_USHORT、またはDataBuffer.TYPE_INTのいずれかになります。
      オーバーライド:
      getTransferType、クラス: SampleModel
      戻り値:
      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のバンドのサブセットを持つ新しいMultiPixelPackedSampleModelを生成します。 MultiPixelPackedSampleModelはバンドを1つしか持たないので、bands引数は長さ1でゼロ番目のバンドを示す必要があります。
      定義:
      createSubsetSampleModel、クラス: SampleModel
      パラメータ:
      bands - 指定されたバンド
      戻り値:
      このMultiPixelPackedSampleModelのバンドのサブセットを持つ新しいSampleModel
      例外:
      RasterFormatException - 要求されたバンド数が1でない場合。
      IllegalArgumentException - wまたはhが0以下である場合
    • getSample

      public int getSample​(int x, int y, int b, DataBuffer data)
      (x, y)に位置するピクセルの、指定されたバンド内のサンプルをintとして返します。 座標が境界内にない場合は、ArrayIndexOutOfBoundsExceptionがスローされます。
      定義:
      getSample、クラス: SampleModel
      パラメータ:
      x - 指定されたピクセルのX座標
      y - 指定されたピクセルのY座標
      b - 返されるバンド(0と見なされます)
      data - イメージ・データを格納するDataBuffer
      戻り値:
      指定されたピクセルのサンプルが格納されている、指定されたバンド
      例外:
      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がスローされます。
      定義:
      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型のプリミティブ配列内の1つのピクセルのデータを返します。 MultiPixelPackedSampleModelの場合、配列は1つの要素を持ち、型は1つのピクセルを格納できるDataBuffer.TYPE_BYTE、DataBuffer.TYPE_USHORT、またはDataBuffer.TYPE_INTのうちの最小のものになります。 一般に、objnullで渡されるので、Objectは自動的に作成され、正しい基本データ型になります。

      次のコードは、MultiPixelPackedSampleModel mppsm1によってストレージ・レイアウトが記述されているDataBuffer db1から、MultiPixelPackedSampleModel mppsm2によってストレージ・レイアウトが記述されているDataBuffer db2へ、1ピクセルのデータを転送する例です。 この転送方法は、getPixelまたはsetPixelを使う方法よりも通常効率的です。

             MultiPixelPackedSampleModel mppsm1, mppsm2;
             DataBufferInt db1, db2;
             mppsm2.setDataElements(x, y, mppsm1.getDataElements(x, y, null,
                                    db1), db2);
       
      SampleModelsのバンド数が同じで、対応するバンドのサンプルあたりのビット数が同じで、TransferTypeが同じである場合、2つのDataBuffer/SampleModelペア間の転送には、getDataElements/setDataElementsを使用するのが適切です。

      objnullでない場合は、TransferType型のプリミティブ配列になります。 そうでない場合は、ClassCastExceptionがスローされます。 座標が境界内にない場合や、objnullでなく、ピクセル・データを格納するために十分な大きさでない場合は、ArrayIndexOutOfBoundsExceptionがスローされます。

      定義:
      getDataElements、クラス: SampleModel
      パラメータ:
      x - 指定されたピクセルのX座標
      y - 指定されたピクセルのY座標
      obj - ピクセル・データを返すプリミティブ配列、またはnull
      data - イメージ・データを格納するDataBuffer
      戻り値:
      指定されたピクセルのデータが格納されているObject
      例外:
      ClassCastException - objがTransferType型のプリミティブ配列でなく、nullでもない場合
      ArrayIndexOutOfBoundsException - 座標が境界内にない場合。またはobjnullではないかピクセル・データを保持するのに十分な大きさではない場合
      関連項目:
      setDataElements(int, int, Object, DataBuffer)
    • getPixel

      public int[] getPixel​(int x, int y, int[] iArray, DataBuffer data)
      int配列の先頭要素の、指定された1つのバンドのピクセルを返します。 座標が境界内にない場合は、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)
      指定されたDataBufferの1つのピクセルのデータを、TransferType型のプリミティブ配列から設定します。 MultiPixelPackedSampleModelの場合は、配列の先頭要素だけが有効なデータを保持し、型は1つのピクセルを保持できるDataBuffer.TYPE_BYTE、DataBuffer.TYPE_USHORT、またはDataBuffer.TYPE_INTのうちの最小のものになります。

      次のコードは、MultiPixelPackedSampleModel mppsm1によってストレージ・レイアウトが記述されているDataBuffer db1から、MultiPixelPackedSampleModel mppsm2によってストレージ・レイアウトが記述されているDataBuffer db2へ、1ピクセルのデータを転送する例です。 この転送方法は、getPixelまたはsetPixelを使う方法よりも通常効率的です。

             MultiPixelPackedSampleModel mppsm1, mppsm2;
             DataBufferInt db1, db2;
             mppsm2.setDataElements(x, y, mppsm1.getDataElements(x, y, null,
                                    db1), db2);
       
      SampleModelオブジェクトのバンド数が同じで、対応するバンドのサンプルあたりのビット数が同じで、TransferTypeが同じである場合、2つのDataBuffer/SampleModelペア間の転送には、getDataElements/setDataElementsを使用するのが適切です。

      objは、TransferType型のプリミティブ配列になります。 そうでない場合は、ClassCastExceptionがスローされます。 座標が境界内にない場合や、objがピクセル・データを格納するために十分な大きさでない場合は、ArrayIndexOutOfBoundsExceptionがスローされます。

      定義:
      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)