2012-09-28 4 views

Antwort

4

Es ist jetzt ziemlich einfach. Libgdx bietet eine example.

Ich musste eine Anweisung hinzufügen, damit es funktioniert. Das Bild konnte nicht direkt unter /screenshot1.png gespeichert werden. Einfach Gdx.files.getLocalStoragePath() voranstellen.

Source Code:

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

Ich hatte viel Glück mit dem minimalen .PNG Encoder von einem Libgdx Forum Element hier: http://www.badlogicgames.com/forum/viewtopic.php?p=8358#p8358

Beachten Sie, dass die resultierenden PNGs nicht optimiert werden, da der Encoder sehr simpel ist (I offline verwendet pngcrush ihre zu reduzieren Größe dramatisch).

Ich hatte auch einige Probleme mit dem Alpha-Kanal. Die darunter liegende Bildschirmfarbe zeigt sich durch transparente Pixel auf dem Bildschirm, kommt aber nicht in den vom Bildschirm abgekratzten Pixeln zum Vorschein (dies ist also nicht wirklich der Fehler des PNG-Encoders). Wenn Ihr Hintergrund schwarz ist, dann stellen Sie sicher, dass der Alphakanal in den Pixeln 1.0 ist (es sei denn, Sie möchten natürlich die Transparenz im Screenshot).

+2

Libgdx jetzt nativ unterstützt PNG-Dateien zu speichern, finden Sie in der 'PixmapIO.writePNG' Methode: http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/ gdx/Grafiken/PixmapIO.html # writePNG (com.badlogic.gdx.files.FileHandle, com.badlogic.gdx.graphics.Pixmap) –