private static BufferedImage gaussianSmooth(BufferedImage sourceImage)
{
// 高斯模板
float[] elements =
{ 1.0f / 16.0f, 2.0f / 16.0f, 1.0f / 16.0f, 2.0f / 16.0f, 4.0f / 16.0f,
2.0f / 16.0f, 1.0f / 16.0f, 2.0f / 16.0f, 1.0f / 16.0f }; BufferedImage bi = new BufferedImage(sourceImage.getWidth(),
sourceImage.getHeight(), BufferedImage.TYPE_INT_RGB);
Graphics2D big = bi.createGraphics();
big.drawImage(sourceImage, 0, 0, null);
// 创建一个Kernel
Kernel kernel = new Kernel(3, 3, elements);
ConvolveOp blur = new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, null);
sourceImage = blur.filter(bi, null); return sourceImage;
}

解决方案 »

  1.   

    关键是这三行,其它的没有什么了,所以你得看Kernel类和ConvolveOp类是如何工作的。
            Kernel kernel = new Kernel(3, 3, elements);
            ConvolveOp blur = new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, null);
            sourceImage = blur.filter(bi, null);
      

  2.   

    个人认为是下面这样,不对的话不要介意哈
    private static BufferedImage gaussianSmooth(BufferedImage sourceImage)
        {
            // 高斯模板
            float[] elements =
            { 1.0f / 16.0f, 2.0f / 16.0f, 1.0f / 16.0f, 2.0f / 16.0f, 4.0f / 16.0f,
                    2.0f / 16.0f, 1.0f / 16.0f, 2.0f / 16.0f, 1.0f / 16.0f };
    //BufferedImage是 一个和你要画的画面的大小一样的一个白板,相当于把sourceImage上的东西先给bufferedImage操作,操作完了又倒回给sourceImage;
            BufferedImage bi = new BufferedImage(sourceImage.getWidth(),
             sourceImage.getHeight(), BufferedImage.TYPE_INT_RGB);
            Graphics2D big = bi.createGraphics();
            big.drawImage(sourceImage, 0, 0, null);
            // 创建一个Kernel       
            Kernel kernel = new Kernel(3, 3, elements);
           //构造kernel矩阵, 边缘条件为EDGE_NO_OP,RenderingHint 对象为null的卷积;
            ConvolveOp blur = new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, null);
            //对BufferedImage bi 进行卷积再将bufferedImage上的东东倒给sourceImage
            sourceImage = blur.filter(bi, null);        return sourceImage;
      

  3.   

    懂了  image  有提高   感谢