Pixmap

Pixmap (исходный код) инкапсулирует данные изображения, находящиеся в оперативной памяти. Поддерживается загрузка файлов и операции рисования для основной обработки изображения. Наиболее типичным использованием является подготовка изображения для загрузки в графический процессор с помощью Texture (исходный код) экземпляра. Существуют также методы для сохранения и загрузки изображения с помощью PixmapIO (исходный код) класса. PixmapIO поддерживает не сжатые PNG, а так же CIM, формат сжатия особенный для libgdx, который полезен для быстрого доступа к хранилищу, во время сохранения или загрузки состояния, между сменой фокуса приложением.

Так как Pixmap находится в нативной памяти, чтобы предотвратить утечку памяти, он должен удален вызовом dispose(), когда он больше не нужен.

Создание Pixmap

Pixmap может быть создан из массива байт, содержащих данные о изображений кодированные как JPEG, PNG или BMP, FileHandle (исходный код) или спецификацию размеров и формата. После создания, его можно изменить, прежде чем загрузить в OpengGL 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 и загрузки в графический процессор. Следовательно он удаляется. Также отметим, что эта текстура будет не управляемой, так как она была создана не из файла, а из участка памяти, который был впоследствии удален.

Следующий пример показывает состояния приостановки и возобновления из жизненного цикла обычного Android приложения.

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

@Override
public void pause() {
  Pixmap pixmap;
  // делаем что-нибудь с pixmap...
  PixmapIO.writeCIM( dataFile, pixmap );
}

@Override
public void resume() {

  if ( dataFile.exists() ) {
    Pixmap pixmap = PixmapIO.readCIM( dataFile );
    // делаем что-нибудь с pixmap...
  }
}

В примере выше, переменная pixmap будет записана во внешнем месте, используя простую схему сжатия, после потерей фокуса приложением и затем после восстановления фокуса, она будет перезагружена, если была сохранена в указанном месте.

Рисование

Pixmap поддерживает простые операции рисования, такие как рисование линий, прямоугольников и окружностей с заливкой и без, а так же установку отдельный пикселей. Эти операции так же зависят от цвета, смешивания и фильтров, которые контролируются соответственно setColor(), setBlending() и setFilter() методами.