截图例程使用LibGdx给出一个空白图像

时间:2013-12-09 13:25:37

标签: java libgdx

我正在尝试制作屏幕截图保护程序。我使用代码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徽标。对这个问题有什么看法吗?

1 个答案:

答案 0 :(得分:3)

取自你的评论:

@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())。