Używam ScreenUtils.getFrameBufferPixels(...)
, aby zrobić zrzut ekranu ekranu gry. Chcę zapisać tablicę bajtów zwróconą przez tę metodę jako obraz w pliku. Używam libGDX i moja uwaga w Androidzie.za pomocą ScreenUtils, aby zapisać zrzut ekranu jako obraz w libgdx
Odpowiedz
To jest teraz dość łatwe. Libgdx zapewnia example.
Musiałem dodać jedno oświadczenie, aby działało. Nie można zapisać obrazu bezpośrednio na /screenshot1.png
. Po prostu zapisz Gdx.files.getLocalStoragePath()
. Kod
Źródło:
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;
}
}
miałem szczęście z minimalnym koderem .PNG dostarczone przez członka forum libgdx tutaj: http://www.badlogicgames.com/forum/viewtopic.php?p=8358#p8358
pamiętać, że wynikające PNG nie są zoptymalizowane, a enkoder jest bardzo uproszczone (użyłem pngcrush zalogowany, aby zmniejszyć ich rozmiar dramatycznie).
Miałem również problemy z kanałem alfa. Podstawowy kolor ekranu pokazuje się przez przezroczyste piksele na ekranie, ale nie przechodzi przez piksele zeskrobane z ekranu (więc nie jest to tak naprawdę błąd kodera PNG). Jeśli twoje tło jest czarne, po prostu upewnij się, że kanał alfa ma 1,0 w pikselach (chyba, że chcesz mieć przezroczystość na zrzucie ekranu, oczywiście).
- 1. Libgdx używa asynchronicznie ScreenUtils i nie przerywa pętli gry
- 2. Jak zapisać obraz jako obraz?
- 3. Zrzut ekranowy LibGDX dziwne zachowanie
- 4. Rozmycie ekranu w LibGDX
- 5. Zrzut ekranu w Haskell?
- 6. jak programowo zrobić zrzut ekranu i zapisać go w galerii?
- 7. Jak zapisać obraz za pomocą libcurl
- 8. Jak zapisać obraz za pomocą obrazu django?
- 9. Jak zapisać obiekt graficzny jako obraz w języku C#?
- 10. Zrzut ekranu pokazuje czarny
- 11. Podział ekranu w LibGDX
- 12. jak zapisać panel jako obraz w ruchu?
- 13. Zrzut ekranu z filmem HTML5 na płótnie za pomocą CORS
- 14. Android wykonuje zrzut ekranu
- 15. programowalny zrzut ekranu przedstawiający fałszywego sąsiada
- 16. Jak programować zrzut ekranu?
- 17. Uzyskaj zrzut ekranu określonej aplikacji
- 18. Opóźnienie zrzut ekranu iOS
- 19. Zrzut ekranu ignoruje niektóre okna
- 20. opencv: jak zapisać tablicę float jako obraz
- 21. jak zrobić zrzut ekranu?
- 22. Zrzut ekranu procesu w ramach usługi Windows
- 23. Ładowanie tekstury w libgdx android za pomocą pliku w res?
- 24. Extract Obwiednia i zapisać go jako obraz
- 25. Zrzut ekranu iOS SDWebage w UITableViewCell
- 26. iPad 3 powolny zrzut ekranu
- 27. Zrzut ekranu Firebase Query zero?
- 28. jak zapisać płótno jako obraz png?
- 29. Jak zapisać obraz jako pole bajtów w bazie danych Kasandra za pomocą silnika cql?
- 30. Jak zapisać kod svg jako obraz .svg?
libgdx teraz natywnie obsługuje zapisywania plików PNG, zobacz 'metody PixmapIO.writePNG': http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/ gdx/graphics/PixmapIO.html # writePNG (com.badlogic.gdx.files.FileHandle, com.badlogic.gdx.graphics.Pixmap) –