2012-09-28 39 views

Trả lời

4

Hiện tại, điều này khá dễ dàng. Libgdx cung cấp example.

Tôi phải thêm một câu lệnh để làm cho nó hoạt động. Không thể lưu trực tiếp hình ảnh vào /screenshot1.png. Đơn giản chỉ cần thêm Gdx.files.getLocalStoragePath().

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

Tôi có may mắn với bộ mã hóa PNG tối thiểu được cung cấp bởi một diễn đàn thành viên libGDX đây: http://www.badlogicgames.com/forum/viewtopic.php?p=8358#p8358

Lưu ý rằng PNG kết quả không được tối ưu hóa, như mã hóa là rất đơn giản (tôi đã sử dụng pngcrush ẩn để giảm của họ kích thước đáng kể).

Tôi cũng gặp một số sự cố với kênh alpha. Màu màn hình cơ bản hiển thị thông qua các điểm ảnh trong suốt trên màn hình, nhưng không đi qua trong các pixel bị xước khỏi màn hình (vì vậy đây không thực sự là lỗi của bộ mã hóa PNG). Nếu nền của bạn có màu đen, thì chỉ cần đảm bảo kênh alpha là 1.0 trong các pixel (trừ khi bạn muốn tính trong suốt trong ảnh chụp màn hình, tất nhiên).

+2

Libgdx tại natively hỗ trợ lưu các tập tin PNG, xem 'phương pháp 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) –

Các vấn đề liên quan