フィルタ(ぼかし)

import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.*;
import javax.swing.*;
import javax.imageio.*;

public class Test {
	public static void main (String[] args)
	{
		BufferedImage1 win = new BufferedImage1("フィルタ(ぼかし)");
	}
}

class BufferedImage1 extends JFrame
{
	/******************/
	/* コンストラクタ */
	/******************/
	BufferedImage1(String name)
	{
					// JFrameクラスのコンストラクタ(Windowのタイトルを引き渡す)
		super(name);
					// Windowの大きさ
		setSize(310, 200);
					// 画像の読み込み
		Image im = getToolkit().getImage("rect.gif");

		MediaTracker trk = new MediaTracker(this);
		trk.addImage(im, 0);
		try {
			trk.waitForID(0);
		}
		catch (InterruptedException e) {}
					// BufferedImage1_MainPanel オブジェクト
		BufferedImage1_MainPanel pn = new BufferedImage1_MainPanel(im);   // BufferedImage1_MainPanel オブジェクトの生成
		getContentPane().add(pn);   // BufferedImage1_MainPanel オブジェクトを ContentPane に追加
					// ウィンドウを表示
		setVisible(true);
					// イベントアダプタ
		addWindowListener(new WinEnd());
	}

	/******************************/
	/* 上,左,下,右の余白の設定 */
	/******************************/
	public Insets getInsets()
	{
		return new Insets(50, 20, 20, 20);
	}

	/************/
	/* 終了処理 */
	/************/
	class WinEnd extends WindowAdapter
	{
		public void windowClosing(WindowEvent e) {
			System.exit(0);
		}
	}
}

class BufferedImage1_MainPanel extends JPanel
{
	Image im1;
	BufferedImage im2;
	BufferedImage1_MainPanel(Image im)
	{
		im1 = im;
		setBackground(new Color(238, 255, 238));   // 背景色の設定
					// BufferedImageに変換
		int w = im1.getWidth(null);
		int h = im1.getHeight(null);
		BufferedImage im0 = new BufferedImage(w+6, h+6, BufferedImage.TYPE_INT_RGB);
		Graphics g = im0.getGraphics();
		g.drawImage(im1, 3, 3, null);
		g.dispose();
					// 回りの領域を背景と同じにする
		for (int i1 = 0; i1 < w+6; i1++) {
			for (int i2 = 0; i2 < 3; i2++)
				im0.setRGB(i1, i2, 0xffeeffee);
		}
		for (int i1 = 0; i1 < w+6; i1++) {
			for (int i2 = h+3; i2 < h+6; i2++)
				im0.setRGB(i1, i2, 0xffeeffee);
		}
		for (int i1 = 0; i1 < 3; i1++) {
			for (int i2 = 0; i2 < h+6; i2++)
				im0.setRGB(i1, i2, 0xffeeffee);
		}
		for (int i1 = w+3; i1 < w+6; i1++) {
			for (int i2 = 0; i2 < h+6; i2++)
				im0.setRGB(i1, i2, 0xffeeffee);
		}
					// フィルタ(ぼかし)
		ConvolveOp c = new ConvolveOp(new Kernel(7, 7,
			new float[] {
				1/49f, 1/49f, 1/49f, 1/49f, 1/49f, 1/49f, 1/49f,
				1/49f, 1/49f, 1/49f, 1/49f, 1/49f, 1/49f, 1/49f,
				1/49f, 1/49f, 1/49f, 1/49f, 1/49f, 1/49f, 1/49f,
				1/49f, 1/49f, 1/49f, 1/49f, 1/49f, 1/49f, 1/49f,
				1/49f, 1/49f, 1/49f, 1/49f, 1/49f, 1/49f, 1/49f,
				1/49f, 1/49f, 1/49f, 1/49f, 1/49f, 1/49f, 1/49f,
				1/49f, 1/49f, 1/49f, 1/49f, 1/49f, 1/49f, 1/49f
			}), ConvolveOp.EDGE_NO_OP, null);
		im2 = c.filter(im0, im2);
	}
					// 描画
	public void paintComponent(Graphics g)
	{
		super.paintComponent(g);   // 親クラスの描画

		g.drawImage(im1, 20, 13, this);

		g.drawImage((Image)im2, 150, 10, this);
	}
}