Снятие скриншотов в libgdx

У меня есть приложение, в котором я хочу снять скриншот экрана игры и сохранить его как изображение и загрузить в Facebook. Я использую Libgdx, и мой фокус – андроид.

Может ли кто-нибудь помочь мне в том, что делать программный снимок экрана игры и сохранять его как образ?

Сейчас довольно легко. Пример Libgdx можно найти здесь .

Я должен был добавить одно заявление, чтобы заставить его работать. Изображение не удалось сохранить непосредственно в /screenshot1.png . Просто добавьте Gdx.files.getLocalStoragePath() .

Исходный код:

 public class ScreenshotFactory { private static int counter = 1; public static void saveScreenshot(){ try{ FileHandle fh; do{ fh = new FileHandle(Gdx.files.getLocalStoragePath() + "screenshot" + counter++ + ".png"); }while (fh.exists()); Pixmap pixmap = getScreenshot(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), false); PixmapIO.writePNG(fh, pixmap); pixmap.dispose(); }catch (Exception e){ } } private static Pixmap getScreenshot(int x, int y, int w, int h, boolean yDown){ final Pixmap pixmap = ScreenUtils.getFrameBufferPixmap(x, y, w, h); if (yDown) { // Flip the pixmap upside down ByteBuffer pixels = pixmap.getPixels(); int numBytes = w * h * 4; byte[] lines = new byte[numBytes]; int numBytesPerLine = w * 4; for (int i = 0; i < h; i++) { pixels.position((h - i - 1) * numBytesPerLine); pixels.get(lines, i * numBytesPerLine, numBytesPerLine); } pixels.clear(); pixels.put(lines); } return pixmap; } } 

Вы хотите создать FrameBuffer, frameBuffer.begin (), сделать все, frameBuffer.end ().

Затем вы можете получить Pixmap. У этого есть все, что вам нужно, чтобы сохранить его как любой файл изображения.

Простое решение:

 Image screenShot = new Image(ScreenUtils.getFrameBufferTexture()); 

Я просто хочу добавить что-то здесь.

При съемке screeenShot нам нужно также рассмотреть черные панели и изменить размер окон. Если у вас нет viewPort (для мобильных устройств), просто замените размеры желоба на 0.

Вот как вы правильно используете fullScreen-screenShot :

 final Pixmap pixmap = ScreenUtils.getFrameBufferPixmap( MyGdxGame.viewport.getLeftGutterWidth(), MyGdxGame.viewport.getTopGutterHeight(), Gdx.graphics.getWidth() - MyGdxGame.viewport.getLeftGutterWidth() - MyGdxGame.viewport.getRightGutterWidth(), Gdx.graphics.getHeight() - MyGdxGame.viewport.getTopGutterHeight() - MyGdxGame.viewport.getBottomGutterHeight()); 

Затем вы можете сохранить pixmap с помощью PixmapIO. https://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/PixmapIO.html

ПРИМЕЧАНИЕ. Обратите внимание, что y не является дном, а верхним. Из-за разницы в системе координат. Вот почему изображение идет вверх дном.

Также вы можете перевернуть pixmap (Только если вы не собираетесь превращать его в Texture, а затем в Sprite), используя код в приведенной ниже ссылке.

https://stackoverflow.com/a/19746741/2205307

Спасибо, я решил это, используя ссылку http://code.google.com/p/libgdx-users/wiki/Screenshots ? Но использовал PixmapIO.wirtePNG (pixmap, fileHandle) вместо PNG.toPNG, потому что он дает ошибку, что нет класса PNG.

Благодаря Stick2, который помог мне.

Intereting Posts
AndroidManifest.xml с ключом com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME Геокодер getFromLocationName не находит адрес Как восстановить удаленный проект консоли Google Обновление плагинов Android 2.2 от Cordova Local Notification Активность просочилась в окно com.android.internal.policy.impl.PhoneWindow$DecorView@44f72ff0, которое было первоначально добавлено здесь Выполнение команд adb на всех подключенных устройствах UIL не поддерживает схему (протокол) по умолчанию. Вы должны реализовать эту поддержку самостоятельно Ant не может найти javac, JAVA_HOME не будет установлен на Ubuntu Скользящая компоновка вкладок для языков справа налево Libstreaming ошибок (буфер декодера не достаточно большой, декодер ничего не декодировал) Конфликт с зависимостью «com.android.support:support-annotations». Разрешенные версии для приложения (23.1.0) и тестового приложения (23.0.1) отличаются Выбор номера у пользователя с несколькими номерами при использовании переключателя контактов Есть ли API для отправки звонков на голосовую почту в Android? Android Design Library: SwipeRefreshLayout не обнаруживает прокрутку поверх CollapsingToolbarLayout Куча памяти приложений для Android продолжает расти