通过按下Prt Scr按钮在LibGDX中制作屏幕截图

时间:2016-02-19 16:36:33

标签: java libgdx printscreen

通过在Stack Overflow上关注this解决方案,我提出了以下Java类:

public final class Screenshot {

    private static byte[] pixels;
    private static Pixmap pixmap;

    public static void take() {
        pixels = ScreenUtils.getFrameBufferPixels(0, 0,
                Gdx.graphics.getBackBufferWidth(),
                Gdx.graphics.getBackBufferHeight(),
                true);

        pixmap = new Pixmap(Gdx.graphics.getBackBufferWidth(),
                Gdx.graphics.getBackBufferHeight(),
                Pixmap.Format.RGBA8888);

        BufferUtils.copy(pixels, 0, pixmap.getPixels(), pixels.length);
        PixmapIO.writePNG(Gdx.files.external("./screenshot_" + new Date().getTime() + ".png"), pixmap);

        pixmap.dispose();
        pixels = null;
    }
}

调用Screenshot().take()将获取LibGDX渲染缓冲区并将其转储到PNG文件中。正是我想要的。

我的问题是,是否有一种“捕获”打印屏幕按钮的好方法。我可以使用打印屏幕键码吗?

1 个答案:

答案 0 :(得分:3)

似乎在LibGDX中你不能

检查键盘输入的方式是

    Gdx.input.isKeyPressed(key)

其中key是类Keys的对象,不包含prtscr按钮

还有什么 - Keys 对象是整数,所以我试图通过检查来找出prtsrc的按钮代码:

    uiStage.addListener(new ClickListener()
    {
        @Override
        public boolean keyDown(InputEvent event, int keycode)
        {
            System.out.println(keycode);
            return true;
        }
    });

我的电脑上有 0 。我已通过打印

检查了 0 类中的 0
    System.out.println(Input.Keys.toString(42));

,结果为Unknown。说实话,我很惊讶,但似乎LibGDX不支持PRINT_SCREEN按钮。

可能有一种方法可以省略LibGDX机制并使用特定于平台的功能来检查prtsrc是否被点击(互联网说它的ASCII码是 44 )但是LibGDX的答案本身似乎是 - 没有办法做到这一点。