Как показать исходное изображение и размытое изображение в JFrame?

У меня есть два изображения в моем JFrame. Первый - оригинал, и я хочу, чтобы второе изображение было размытым. У меня оба изображения отражаются в кадре, но второе не размыто. Как я могу лучше закодировать эту программу, чтобы отразить размытое изображение?

 public static void main(String[] args) throws IOException {
            String path = "src/logo.jpg";
            File file = new File(path);
            BufferedImage image = ImageIO.read(file);
            JLabel label = new JLabel(new ImageIcon(image));
            JFrame f = new JFrame();
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            f.getContentPane().add(label);
            f.pack();
            f.setLocation(0,200);
            f.setVisible(true);

            String path2 = "src/logo.jpg";
            File file2 = new File(path2);
            BufferedImage image2 = ImageIO.read(file2);
            JLabel label2 = new JLabel(new ImageIcon(image2));
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            f.getContentPane().add(label2);
            f.pack();
            f.setLocation(200,200);
            f.setVisible(true);

            float[] matrix = new float[400];
            for (int i = 0; i < 400; i++)
                matrix[i] = 1.0f/400.0f;

            BufferedImageOp op = new ConvolveOp( new Kernel(20, 20, matrix), ConvolveOp.EDGE_NO_OP, null );
            image2 = op.filter(image, null);

        }}

Также мое местоположение второго изображения отключено, и даже не с первым изображением. В моем setLocation оба изображения должны располагаться рядом с промежутком между ними.


person mrsw    schedule 30.10.2014    source источник


Ответы (1)


  1. Добавьте первую метку в позицию BorderLayout.WEST, а вторую — в позицию BorderLayout.EAST.
  2. Добавьте результат операции размытия ко второй метке, а не к исходному изображению. Операция размытия создает новое изображение

Например

public static void main(String[] args) throws IOException {
            String path = "src/logo.jpg";
            File file = new File(path);
            BufferedImage image = ImageIO.read(file);
            JLabel label = new JLabel(new ImageIcon(image));
            JFrame f = new JFrame();
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            f.getContentPane().add(label, BorderLayout.WEST);

            String path2 = "src/logo.jpg";
            File file2 = new File(path2);
            BufferedImage image2 = ImageIO.read(file2);

            float[] matrix = new float[400];
            for (int i = 0; i < 400; i++)
                matrix[i] = 1.0f/400.0f;

            BufferedImageOp op = new ConvolveOp( new Kernel(20, 20, matrix), ConvolveOp.EDGE_NO_OP, null );
            image2 = op.filter(image, null);
            JLabel label2 = new JLabel(new ImageIcon(image2));
             f.getContentPane().add(label, BorderLayout.WEST);

             f.pack();
             f.setVisible(true);

        }
person MadProgrammer    schedule 30.10.2014