2012-09-28 13 views

答えて

4

今はかなり簡単です。 Libgdxはexampleを提供します。

これを動作させるには、1つのステートメントを追加する必要がありました。画像を/screenshot1.pngに直接保存することはできませんでした。単にGdx.files.getLocalStoragePath()の前に。

ソースコード:http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/:

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

私はここにlibGDXフォーラムのメンバーが提供する最小限の.PNGエンコーダと幸運を持っていた:エンコーダは非常に単純であるとして、その結果PNG画像は、最適化されていないことをhttp://www.badlogicgames.com/forum/viewtopic.php?p=8358#p8358

注意(私は彼らを減らすためにpngcrushオフラインで使用サイズは劇的に)。

また、アルファチャンネルにいくつか問題がありました。下にある画面の色は画面上の透明なピクセルを介して表示されますが、画面から削り取られたピクセルでは表示されません(実際はPNGエンコーダの障害ではありません)。背景が黒い場合は、アルファチャンネルがピクセルで1.0になっていることを確認してください(もちろん、スクリーンショットに透過性を必要としない限り)。

+2

Libgdxは今ネイティブPNGファイルを保存するサポート、 'PixmapIO.writePNG'方法を参照してくださいgdx/graphics/PixmapIO.html#writePNG(com.badlogic.gdx.files.FileHandle、com.badlogic.gdx.graphics.Pixmap) –

関連する問題