2016-04-25 7 views
1

Ich habe ein Mesh, auf dem ich eine Textur in Render loop mit textur.bind() gebunden habe;libgdx mesh screenshot original resolution

Die ursprüngliche Auflösung der Textur ist 1024 x 1024. Auflösung Meiner Desktop-Bildschirm ist 1366 x 768.

Also mache ich einige Änderungen in der Gitterdreiecke der Textur des Aussehen zu verändern. Ich bewege hier und da ein paar Dreiecke, um ein endgültiges Bild zu erhalten. Jetzt möchte ich das Bild in seiner ursprünglichen Auflösung speichern, aber wenn ich dabei das Original-Pixmap des Bildes verwende, speichert es das Originalbild vor der Änderung in 1024x1024. Aber ich möchte das modifizierte Bild in 1024x1024 speichern.

Ich habe auch den Screenshot Code:

byte[] pixels = ScreenUtils.getFrameBufferPixels(0, 0, Gdx.graphics.getBackBufferWidth(), Gdx.graphics.getBackBufferHeight(), true); 
Pixmap pixmap = new Pixmap(Gdx.graphics.getBackBufferWidth(), Gdx.graphics.getBackBufferHeight(), Pixmap.Format.RGBA8888); 
BufferUtils.copy(pixels, 0, pixmap.getPixels(), pixels.length); 
PixmapIO.writePNG(Gdx.files.local("saved/screenshot.png"), pixmap); 
pixmap.dispose(); 

Aber es speichert das Bild in 1024x750 Auflösung wegen der geringeren Bildschirmauflösung (getBackBufferHeight wird 750 in diesem Fall).

Ich möchte jetzt das geänderte Bild erfassen/speichern (modifiziert mit Mesh-Dreiecke). Was genau muss ich jetzt tun, um das geänderte 1024x1024 Bild zu erhalten? Soll ich ein ScrollPane verwenden, um das Bild in seiner ursprünglichen Auflösung anzuzeigen, so dass, wenn ich einen Screenshot mache, ich 1024x1024 bekomme?

Antwort

1

Nehmen Sie Ihre Änderungen an einem Bildpuffer mit richtiger Größe und nicht an dem Hintergrundpuffer des Bildschirms vor. Seien Sie jedoch vorsichtig, ob das Gerät RGBA8888 für Frame-Puffer unterstützt (für OpenGL ES 2.0 ist es nicht erforderlich, sodass einige GPUs dies nicht unterstützen).

int width = 1024; 
int height = 1024; 
FrameBuffer frameBuffer; 
try { 
    frameBuffer = new FrameBuffer(Pixmap.Format.RGBA8888, width, height, false); 
} catch (GdxRuntimeException e) { 
    frameBuffer = new FrameBuffer(Pixmap.Format.RGB565, width, height, false); 
} 
frameBuffer.begin(); 
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
//draw your texture and do your manipulations. 

byte[] pixels = ScreenUtils.getFrameBufferPixels(0, 0, width, height, true); 
Pixmap pixmap = new Pixmap(width, height, Pixmap.Format.RGBA8888); 
BufferUtils.copy(pixels, 0, pixmap.getPixels(), pixels.length); 
PixmapIO.writePNG(Gdx.files.local("saved/screenshot.png"), pixmap); 
pixmap.dispose(); 

frameBuffer.end(); 
frameBuffer.dispose(); 
+0

Danke Mann! Es funktioniert jetzt. Du hast mich wieder gerettet :) –