java中模糊图像的最快方法

java中模糊图像的最快方法,java,android,image-processing,blur,Java,Android,Image Processing,Blur,编辑我正在使用EclipseADT包,但当我尝试在上面的建议答案中导入库时,它不起作用 我使用LibGDX和Java 90-99%Java的组合来模糊图像。模糊可以工作,但拍摄屏幕截图、保存、访问、模糊、保存和重新访问几乎需要一秒钟的时间。我不能做太多的预处理,因为它需要游戏的截图来模糊。以下是我目前用于模糊的内容:如果您需要查看,我会将绘图和屏幕截图放在上面,但我认为问题在于800x480 png的模糊 import java.awt.image.BufferedImage; import j

编辑我正在使用EclipseADT包,但当我尝试在上面的建议答案中导入库时,它不起作用

我使用LibGDX和Java 90-99%Java的组合来模糊图像。模糊可以工作,但拍摄屏幕截图、保存、访问、模糊、保存和重新访问几乎需要一秒钟的时间。我不能做太多的预处理,因为它需要游戏的截图来模糊。以下是我目前用于模糊的内容:如果您需要查看,我会将绘图和屏幕截图放在上面,但我认为问题在于800x480 png的模糊

import java.awt.image.BufferedImage;
import java.awt.image.BufferedImageOp;
import java.awt.image.ConvolveOp;
import java.awt.image.Kernel;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.files.FileHandle;


public class Blur {
    private static BufferedImage mshi;
    private BufferedImage databuf;
    private static int blurRad = 300;

    public static void createBlur(FileHandle file) throws IOException {
        mshi = ImageIO.read(file.file());
        BufferedImage databuf = new BufferedImage(mshi.getWidth(null),
                mshi.getHeight(null),
                BufferedImage.TYPE_INT_BGR);

        java.awt.Graphics g = databuf.getGraphics();
        g.drawImage(mshi, 455, 255, null);

        float[] blurKernel = new float[blurRad*blurRad];
        for(int i =0; i<blurRad*blurRad; i++) {
            blurKernel[i] = 1.0f/256.0f;
        }

        BufferedImageOp op = new ConvolveOp( new Kernel(20, 20, blurKernel), ConvolveOp.EDGE_ZERO_FILL, null );
        mshi = op.filter(mshi, databuf);

        g.dispose();    

        File outputfile = Gdx.files.local("Blur.png").file();
        ImageIO.write(mshi, "png", outputfile);
    }
}

可能与First off重复,看起来您正在为内核分配90000个元素,然后只使用其中的400个元素,这将浪费一些时间。此外,平均滤波器是可分离的。这意味着您可以对每行执行1D卷积,然后对每列执行1D卷积,并获得与使用2D平均滤波器进行卷积相同的效果。这就是每像素400次运算和每像素40次运算的区别。我认为ImageIO和Java2D在Android上不起作用吗?还是我遗漏了什么?试试看