나는 ScreenUtils.getFrameBufferPixels(...)
을 사용하여 게임 화면의 스크린 샷을 찍습니다. 이 메서드에 의해 반환 된 바이트 배열을 파일의 이미지로 저장하려고합니다. 나는 안드로이드에서 libGDX와 포커스를 사용하고 있습니다.ScreenUtils를 사용하여 스크린 샷을 libgdx의 이미지로 저장
5
A
답변
4
이제 매우 쉽습니다. Libgdx는 example을 제공합니다.
작동시키기 위해 하나의 명령문을 추가해야했습니다. 이미지를 직접 /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 인코더 행운이 있었다 (나는 줄이기 위해 오프라인 pngcrush 사용 http://www.badlogicgames.com/forum/viewtopic.php?p=8358#p8358
주 인코더가 매우 단순한이기 때문에 결과 PNG 파일이 최적화되지 않은 것을 자신의 크기는 극적으로).
또한 알파 채널에 몇 가지 문제가있었습니다. 기본 화면 색상은 화면의 투명한 픽셀을 통해 표시되지만 화면에서 스크랩 된 픽셀에서는 나타나지 않습니다 (따라서 PNG 인코더의 실제 오류는 아닙니다). 배경이 검은 색이면 알파 채널이 픽셀 단위로 1.0인지 확인하십시오 (물론 스크린 샷의 투명도를 원하지 않는 한).
관련 문제
- 1. html2canvas를 사용하여 스크린 샷을 저장하려면 어떻게해야합니까?
- 2. 페이지의 스크린 샷을 가져
- 3. 어떻게 스크린 샷을 가지고 PHP에서
- 4. 스크린 샷을 찍는 방법?
- 5. 화면의 스크린 샷을 찍으십시오.
- 6. 오디오 스트림의 스크린 샷을 찍으십시오.
- 7. Sikuli를 사용하여 스크린 샷을 찍는 방법?
- 8. jquery를 사용하여 웹 사이트의 스크린 샷을 생성하십시오.
- 9. 플래시를 사용하여 스크린 샷을 얻는 방법은 무엇입니까?
- 10. scrollviewer를 사용하여 WPF DataGrid의 스크린 샷을 찍으십시오.
- 11. 아이폰 SDK에서 UIImageView의 스크린 샷을 찍는 방법
- 12. div와 html2canvas의 스크린 샷을 가져와 이미지를 표시하십시오.
- 13. 자바를 사용하여 잠겨져있을 때 창의 스크린 샷을 얻을 수있는 방법이 있습니까? 우리는에 스크린 샷을 취할 수
- 14. 이 라이브러리를 사용하여 Android (에뮬레이터)의 스크린 샷을 찍는 방법과 스크린 샷을 얻을 수있는 곳
- 15. 렌더링 된 HTML 이미지로 저장
- 16. iPhone - UIImagePickerController 스크린 샷을 찍으시겠습니까?
- 17. 많은 스크린 샷을 서버에서 스트리밍
- 18. jmonkey3에서 스크린 샷을 얻는 방법
- 19. 프로그램에서 스크린 샷을 방지하는 방법
- 20. 스크린 샷을 찍을 수 없습니다.
- 21. 스크린 샷을 찍어서 OCR 사용하기
- 22. 올바른 방법으로 스크린 샷을 캡처
- 23. 스크린 샷을 가져 오는 Win32 API는 무엇입니까?
- 24. Google 어스 Screeshot 및 이미지로 저장
- 25. 동영상을 여러 개의 스크린 샷 이미지로 변환
- 26. 품질을 잃지 않고 스크린 샷을 확장하는 방법은 무엇입니까?
- 27. OpenGL 뷰어에있는 스크린 샷을 저장하는 방법은 무엇입니까?
- 28. VB없이 실물 크기의 스크린 샷을 만드는 방법
- 29. GStreamer의 비디오에서 스크린 샷을 추출 하시겠습니까?
- 30. C에서 클립 보드의 스크린 샷을 분리하는 방법
Libgdx 지금 기본적으로 PNG 파일을 저장 지원은'PixmapIO.writePNG' 방법을 참조 gdx/graphics/PixmapIO.html # writePNG (com.badlogic.gdx.files.FileHandle, com.badlogic.gdx.graphics.Pixmap) –