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