Tôi đang sử dụng ScreenUtils.getFrameBufferPixels(...)
để chụp ảnh màn hình trò chơi. Tôi muốn lưu mảng byte được trả về bằng phương thức này dưới dạng hình ảnh trong tập tin. Tôi đang sử dụng libGDX và trọng tâm của tôi trong Android.sử dụng ScreenUtils để lưu ảnh chụp màn hình dưới dạng hình ảnh trong libgdx
Trả lời
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;
}
}
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).
- 1. Chụp UIView và Lưu dưới dạng Hình ảnh
- 2. Lưu bảng HTML dưới dạng hình ảnh
- 3. Ảnh chụp màn hình Webdriver
- 4. Làm cách nào để chụp màn hình hiện tại dưới dạng hình ảnh?
- 5. Trong MATLAB, làm cách nào để bạn lưu hình ảnh dưới dạng hình ảnh giống như cách sử dụng "Lưu dưới dạng ..." trong cửa sổ hình?
- 6. Video dưới dạng Màn hình Splash thay vì Hình ảnh
- 7. Ảnh chụp màn hình bị rò rỉ?
- 8. iOS Ảnh chụp màn hình một phần của màn hình
- 9. iPad 3 ảnh chụp màn hình chậm
- 10. Chụp màn hình vào một ảnh bitmap
- 11. Lớp phủ màn hình cho ảnh chụp màn hình
- 12. beamer includegraphics với ảnh chụp màn hình
- 13. Trì hoãn ảnh chụp màn hình iOS
- 14. Chụp ảnh màn hình với C \ GTK
- 15. Ảnh chụp màn hình OpenGL Android
- 16. Ngăn chụp ảnh màn hình trong ứng dụng iOS
- 17. Chụp ảnh màn hình của Android OpenGL
- 18. Làm cách nào để lưu ImageView dưới dạng hình ảnh?
- 19. Lưu dưới dạng hình ảnh png trong android
- 20. Ảnh chụp màn hình quy trình trong Windows Service
- 21. Ảnh chụp màn hình mua hàng trong ứng dụng iPhone
- 22. Lưu một trang web dưới dạng hình ảnh
- 23. Đường dẫn đến ảnh chụp màn hình trong Android
- 24. Chụp màn hình
- 25. Làm thế nào để ghi lại màn hình và lưu dưới dạng hoạt ảnh gif?
- 26. Lưu canvas WPF dưới dạng hình ảnh theo Mẫu MVVM
- 27. Có cách nào để chụp ảnh màn hình bằng Java và lưu nó vào một số loại hình ảnh không?
- 28. Nhận dạng hình ảnh trong hình ảnh trong C#
- 29. Lưu biểu đồ flot dưới dạng hình ảnh
- 30. Chụp màn hình <body> với html2canvas và lưu trữ img dưới dạng JS var
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) –