2012-09-28 9 views

Odpowiedz

4

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; 
    } 
} 
3

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).

+2

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) –