在游戏暂停之前复制当前屏幕的图片模糊它并在游戏暂停期间渲染到屏幕

Copy a picture of the current screen just before game pause blur it and render to screen in the duration of game pause

我在实现游戏暂停模糊屏幕以在游戏暂停状态下呈现时遇到问题。我需要拍摄当前屏幕的图片或纹理,即游戏运行状态,就在用户暂停屏幕时。也许将它存储到内存中,对其进行模糊处理,然后将其渲染到屏幕上以实现漂亮的模糊效果,高斯模糊效果就像在愤怒的小鸟等流行游戏中所做的那样。

我尝试使用屏幕截图实现,但是屏幕截图的过程让游戏冻结了几秒钟,这并不好。

这是我的渲染代码的一部分

private void updatePlayerForUserInput(float delta)
        {
        if (Gdx.input.isKeyPressed(Keys.P) || pause)
                    {
                        ScreenShotSaver.saveScreenShot();

                        state = State.GAME_PAUSED;

                        if(!DEBUG_MODE)
                        {
                            toggleGestureProcessor(false);

                            setBackgroundTexture(new TextureRegion(applyBlurEffect(Gdx.files.external("madboy/screenshot.png"))));

                            gameScreenGamePauseMenu.sendInMenu();
                        }
                    }
        }

谁能帮忙实现这样的屏幕

这是我非常想要的效果示例 1个 :enter link description here 这是另一个,但类似的东西 2:enter link description here

这是我根据游戏状态更新逻辑的一部分

private void render(float delta)
            {
    switch (state)
            {

            case GAME_READY:
                renderReady();
                break;

            case GAME_RUNNING:
                renderRunning(delta);
                break;

            case GAME_PAUSED:
                renderPaused();
                break;

            case GAME_LEVEL_END:
                renderLevelEnd();
                break;

            case GAME_OVER:
                renderGameOver();
                break;
            }

        }



            private void update(float delta)
            {
                    switch(state)
                    {
                    case GAME_READY:
                        updateReady();
                        break;
                    case GAME_RUNNING:
                        updateRunning(delta);
                        break;
                    case GAME_PAUSED:
                        updatePaused();
                        break;
                    case GAME_LEVEL_END:
                        updateLevelEnd();
                        break;
                    case GAME_OVER:
                        updateGameOver();
                        break;
                    }
            }

我在 java

中使用 Libgdx 库和编程

不要将屏幕截图的图像保存到文件中,而是尝试使用以下方法

TextureRegion(Texture)

Texture(Pixmap)

Pixmap(byte[], int, int)

Pixmap的构造函数中的字节数组应该包含图像字节,两个int是offset和length

如何以字节形式获取图像的示例:

BufferedImage bufferedImage = new Robot().createScreenCapture(new Rectangle(startX, startY, width, height));
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ImageIO.write(bufferedImage, format, outputStream);
outputStream.flush();
byte[] data = outputStream.toByteArray();
outputStream.close();

其中 format 可以是字符串形式的任何图像格式(下面的示例):

String format = "png";
String format = "jpg";