在LibGDX中模糊屏幕

我试图创build一个像这样的背景效果为我的暂停菜单。 我目前的想法是暂停,保存,打开它,高斯模糊,然后渲染到屏幕上,然后渲染菜单ontop。 唯一的问题是我不知道如何有效地保存屏幕截图。

我试过使用batch.setColor(0,0,0,0.7f); 在背景上渲染一个褪色的图像,但它没有给我我正在寻找的模糊效果,而只是一个色调,因为我认为它会的。

示例/文档非常感谢。

编辑:发现这个代码

 package com.me.mygdxgame; import java.awt.Point; import java.awt.color.ColorSpace; import java.awt.image.BufferedImage; import java.awt.image.ColorModel; import java.awt.image.ComponentColorModel; import java.awt.image.DataBuffer; import java.awt.image.DataBufferByte; import java.awt.image.PixelInterleavedSampleModel; import java.awt.image.Raster; import java.awt.image.WritableRaster; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import com.badlogic.gdx.Application.ApplicationType; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.utils.ScreenUtils; public class ScreenShot { private static final int[] RGBA_OFFSETS = { 0, 1, 2, 3 }; private static final int[] RGB_OFFSETS = { 0, 1, 2 }; public static void saveScreenshot(String baseName) throws IOException { File createTempFile = File.createTempFile(baseName, ".png"); saveScreenshot(createTempFile); } public static void saveScreenshot(File file) throws IOException { saveScreenshot(file, false); } public static void saveScreenshot(File file, boolean hasAlpha) throws IOException { if (Gdx.app.getType() == ApplicationType.Android) return; byte[] screenshotPixels = ScreenUtils.getFrameBufferPixels(true); int width = Gdx.graphics.getWidth(); int height = Gdx.graphics.getHeight(); saveScreenshot(file, screenshotPixels, width, height, hasAlpha); } public static void saveScreenshot(File file, byte[] pixels, int width, int height, boolean hasAlpha) throws IOException { DataBufferByte dataBuffer = new DataBufferByte(pixels, pixels.length); PixelInterleavedSampleModel sampleModel = new PixelInterleavedSampleModel(DataBuffer.TYPE_BYTE, width, height, 4, 4 * width, getOffsets(hasAlpha)); WritableRaster raster = Raster.createWritableRaster(sampleModel, dataBuffer, new Point(0, 0)); BufferedImage img = new BufferedImage(getColorModel(hasAlpha), raster, false, null); ImageIO.write(img, "png", file); } private static ColorModel getColorModel(boolean alpha) { if (alpha) return new ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_sRGB), new int[] { 8, 8, 8, 8 }, true, false, ComponentColorModel.TRANSLUCENT, DataBuffer.TYPE_BYTE); return new ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_sRGB), new int[] { 8, 8, 8 }, false, false, ComponentColorModel.OPAQUE, DataBuffer.TYPE_BYTE); } private static int[] getOffsets(boolean alpha) { if (alpha) return RGBA_OFFSETS; return RGB_OFFSETS; } } 

但当我尝试saveScreenshot("output");时,它给了我这个错误saveScreenshot("output"); (runnign桌面版本,如果这有所作为。没有在android上testing过)

 Exception in thread "LWJGL Application" com.badlogic.gdx.utils.GdxRuntimeException: java.awt.image.RasterFormatException: Incorrect scanline stride: 3200 at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:111) Caused by: java.awt.image.RasterFormatException: Incorrect scanline stride: 3200 

错误行: ImageIO.write(img, "png", file);

Solutions Collecting From Web of "在LibGDX中模糊屏幕"