2012-09-28 22 views

risposta

4

Ora è abbastanza semplice. Libgdx fornisce uno example.

Ho dovuto aggiungere una dichiarazione per farlo funzionare. L'immagine non può essere salvata direttamente su /screenshot1.png. Semplicemente anticipato Gdx.files.getLocalStoragePath(). Codice

Fonte:

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

ho avuto buona fortuna con l'encoder .PNG minima fornita da un membro del forum libGDX qui: http://www.badlogicgames.com/forum/viewtopic.php?p=8358#p8358

Nota che i PNG risultanti non sono ottimizzati, come l'encoder è molto semplicistico (io ho usato pngcrush offline per ridurre il loro dimensione drammaticamente).

Ho anche avuto qualche problema con il canale alfa. Il colore dello schermo sottostante viene visualizzato attraverso i pixel trasparenti sullo schermo, ma non viene attraversato dai pixel raschiati dallo schermo (quindi questo non è proprio il difetto dell'encoder PNG). Se il tuo sfondo è nero, assicurati solo che il canale alfa sia 1.0 nei pixel (a meno che tu non voglia la trasparenza nello screenshot, ovviamente).

+2

Libgdx ora supporta nativamente il salvataggio dei file PNG, vedere il metodo '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) –

Problemi correlati