2012-09-28 36 views

Respuesta

4

Ahora es bastante fácil. Libgdx proporciona un example.

Tuve que agregar una declaración para que funcione. La imagen no se pudo guardar directamente en /screenshot1.png. Simplemente anteponga Gdx.files.getLocalStoragePath(). Código

Fuente:

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

tuve buena suerte con el codificador PNG mínima proporcionada por un miembro del foro libgdx aquí: http://www.badlogicgames.com/forum/viewtopic.php?p=8358#p8358

Tenga en cuenta que los archivos PNG resultantes no están optimizados, como el codificador es muy simplista (utilicé pngcrush fuera de línea para reducir su tamaño dramáticamente).

También tuve algunos problemas con el canal alfa. El color de la pantalla subyacente se muestra a través de píxeles transparentes en la pantalla, pero no aparece en los píxeles extraídos de la pantalla (así que esto no es realmente culpa del codificador PNG). Si el fondo es negro, solo asegúrate de que el canal alfa tenga 1.0 en los píxeles (a menos que quieras la transparencia en la captura de pantalla, por supuesto).

+2

libgdx ahora soporta de forma nativa guardar archivos PNG, consulte el método '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) –

Cuestiones relacionadas