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() методами.
Комментариев нет:
Отправить комментарий