サイトのトップへ戻る

libGDX ドキュメント 日本語訳

サイト内検索

Pixmaps



はじめに

Pixmap (code)は画像データをカプセル化してメモリ内に常駐させます。基本的な画像操作をするための簡単なファイル読み込み処理と描写処理をサポートしています。 最も一般的な使用方法は、これをTexture (コード) インスタンスに格納して、 GPU へアップロードするための画像を準備することです。 また、PixmapIO (コード) クラスを介して画像の保存/読み込みを行うメソッドもあります。 PixmapIO は 非圧縮の PNGだけでなくCIM もサポートしています。 CIMはLibgdx 固有の圧縮形式で、アプリケーションのフォーカスが移る間での状態の保存/読み込みのような、素早くストレージにアクセスする際に便利です。

Pixmap はネイティブヒープメモリーに常駐するので、メモリリークを防ぐために、不要になったら dispose()を実行して破棄しなければなりません。



Pixmap の作成

JPEGPNGBMPとしてエンコードされた画像データを含むbyte arrayを使う、 FileHandle (コード)を使う、 サイズと画像形式を指定する、といった方法でPixmap を作成できます。 Pixmap を作成したら、OpenGL Texture (コード)へアップロードする前に、後で使うための描写を加えたり保存したりすることができます。

次の例では64x64 サイズの32ビット RGBA Pixmapを作成し、その中に緑で中塗りした円を描写し、 Texture にアップロードしてそのメモリを破棄しています:

Pixmap pixmap = new Pixmap( 64, 64, Format.RGBA8888 );
pixmap.setColor( 0, 1, 0, 0.75f );
pixmap.fillCircle( 32, 32, 32 );
Texture pixmaptex = new Texture( pixmap );
pixmap.dispose();

Pixmapのメモリは、Textureに格納されてGPUにアップロードされた後は不要になるので忘れないでください。したがって 破棄を行います。 ファイルから作成されたものではなく後で破棄される揮発性のメモリの一部のため、このTexture もアンマネージドになるので注意してください。

次の例では、標準的なAndroid アプリケーションの一時停止/再開のライフサイクルを説明します:

FileHandle dataFile = Gdx.files.external( dataFolderName + "current.cim" );

@Override
public void pause() {
  Pixmap pixmap;
  // do something with pixmap...
  PixmapIO.writeCIM( dataFile, pixmap );
}

@Override
public void resume() {

  if ( dataFile.exists() ) {
    Pixmap pixmap = PixmapIO.readCIM( dataFile );

    // do something with pixmap...
  }
}

上記の例では、アプリケーションのフォーカスが失われた時に、簡単な圧縮スキームを使ってpixmapを外部の保存場所に保存しています。 その後アプリケーションにフォーカスが戻った時、指定した保存場所が存在する場合にはpixmapを再読み込みします。



描画

Pixmap では線描写、塗つぶし有や塗つぶし無の長形や円の描写といったような簡単な描写処理だけでなく、ピクセルの個別設定やその他ピクセル描写をサポートしています。 これらの操作も、setColor()で設定する色、 setBlending()で設定するブレンド処理、setFilter() で設定するフィルターの影響を受けます。