我正在尝试制作屏幕快照保护程序例程。我使用代码here作为基础,因此生成的代码如下所示:

public void update(float deltaTime) {
        if(Gdx.input.isKeyPressed(Keys.ESCAPE)) {
            Gdx.app.exit();
        }
        if(Gdx.input.isKeyPressed(Keys.F10)) {
            this.saveScreenshot(new FileHandle(new File("screenshots/screenShot001.png")));
        }
    }

    public void saveScreenshot(FileHandle file) {
        Pixmap pixmap = getScreenshot(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), true);

        PixmapIO.writePNG(file, pixmap);
        pixmap.dispose();
    }

    public Pixmap getScreenshot(int x, int y, int w, int h, boolean flipY) {
        Gdx.gl.glPixelStorei(GL10.GL_PACK_ALIGNMENT, 1);

        final Pixmap pixmap = new Pixmap(w, h, Format.RGBA8888);
        ByteBuffer pixels = pixmap.getPixels();
        Gdx.gl.glReadPixels(x, y, w, h, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, pixels);

        final int numBytes = w * h * 4;
        byte[] lines = new byte[numBytes];
        if (flipY) {
            final 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);
        } else {
            pixels.clear();
            pixels.get(lines);
        }

        return pixmap;
    }


该文件已创建,似乎是正确的PNG图像,具有正确的大小,但它是空白的。该应用程序是setup-ui制作的示例,并显示libGDX徽标。有什么问题的想法吗?

最佳答案

摘自您的评论:

@Override public void render() {
    Gdx.gl.glClearColor(1, 1, 1, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    controller.update(Gdx.graphics.getDeltaTime());
    batch.setProjectionMatrix(camera.combined);
    batch.begin();
    sprite.draw(batch);
    batch.end();
}


问题在于您先清除颜色,然后检查输入(并进行屏幕截图),然后呈现徽标。

呈现徽标(controller.update(Gdx.graphics.getDeltaTime());)后,将render移动到batch.end()方法的末尾。

10-07 16:16
查看更多