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); } }