Package paintmultimedia

Source Code of paintmultimedia.EditorImagen$EditorImagen_bmedia_actionAdapter

/*
    Copyright(c) 2006 David Armenteros Escabias
   
    This file is part of PaintMultimedia.

    PaintMultimedia is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

package paintmultimedia;

import java.awt.Dimension;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.MediaTracker;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.Graphics2D;
import java.io.*;
import java.util.Dictionary;
import java.util.Hashtable;
import javax.swing.*;
import java.awt.Insets;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import com.sun.image.codec.jpeg.JPEGCodec;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.Kernel;
import java.awt.image.ConvolveOp;
import java.awt.image.RescaleOp;
import java.util.Vector;
import java.awt.FlowLayout;

/**
* <p>Title: PaintMultimedia</p>
*
* <p>Description: Aplicacion que permite realizar dibujos, mostrar imagenes de
* diferentes formatos y reproducir sonido y video</p>
*
* <p>Copyright: Copyright (c) 2006</p>
*
* <p>Company: </p>
*
* @author David Armenteros Escabias
* @version 1.0
*/
public class EditorImagen extends JPanel {

    JPanel PanelImagen = new JPanel();
    BorderLayout borderLayout2 = new BorderLayout();
    JScrollPane jSPTapiz = new JScrollPane();
    Tapiz PanelTapiz = new Tapiz(200, 200);
    JPanel PanelFiltrosImagen = new JPanel();
    JSlider sBrillo = new JSlider(JSlider.HORIZONTAL, -255, 255, 0);
    JPanel PanelBrillo = new JPanel();
    BorderLayout borderLayout4 = new BorderLayout();
    JLabel jLabel2 = new JLabel();
    BorderLayout borderLayout6 = new BorderLayout();
    BorderLayout borderLayout1 = new BorderLayout();
    //Constantes que definen los tipos de transformaciones en la imagen
    final int SUAVIZADO = 0, PASOBAJO = 1, MEDIA = 2, ROBERTS_H = 3, ROBERTS_V =
            4;
    final int PREWITT_H = 5, PREWITT_V = 6, SOBEL_H = 7, SOBEL_V = 8,
            FREICHEN_H = 9;
    final int FREICHEN_V = 10, LAPLACIANO = 11, SHARPENBAJO = 12, SHARPENALTO =
            13;
    final float[][] TRANSFORMACIONES = {{1f / 16f, 2f / 16f, 1f / 16f,
            2f / 16f, 4f / 16f, 2f / 16f, //SUAVIZADO
            1f / 16f, 2f / 16f, 1f / 16f},
        {0f, 1f / 10f, 0f,
            1f / 10f, 6f / 10f, 1f / 10f, //PASOBAJO
            0f, 1f / 10f, 0f},
        {1f / 9f, 1f / 9f, 1f / 9f,
            1f / 9f, 1f / 9f, 1f / 9f, //MEDIA
            1f / 9f, 1f / 9f, 1f / 9f},
        {0f, 0f, -1f,
            0f, 1f, 0f, //ROBERTS_HORIZONTAL
            0f, 0f, 0f},
        {-1f, 0f, 0f,
            0f, 1f, 0f, //ROBERTS_VERTICAL
            0f, 0f, 0f},
        {1f, 0f, -1f,
            1f, 0f, -1f, //PREWITT_HORIZONTAL
            1f, 0f, -1f},
        {-1f, -1f, -1f,
            0f, 0f, 0f, //PREWITT_VERTICAL
            1f, 1f, 1f},
        {1f, 0f, -1f,
            2f, 0f, -2f, //SOBEL_HORIZONTAL
            1f, 0f, -1f},
        {-1f, -2f, -1f,
            0f, 0f, 0f, //SOBEL_VERTICAL
            1f, 2f, 1f},
        {1f, 0f, -1f,
            (float) Math.sqrt(2f), 0f,
            (float) -Math.sqrt(2f), //FREICHEN_HORIZONTAL
            1f, 0f, -1f},
        {-1f, (float) -Math.sqrt(2f), -1f,
            0f, 0f, 0f, //FREICHEN_VERTICAL
            1f, (float) Math.sqrt(2f), 1f},
        {-1f, -1f, -1f,
            -1f, 8f, -1f, //LAPLACIANO
            -1f, -1f, -1f},
        {1f, -2f, 1f,
            -2f, 5f, -2f, //SHARPENBAJO
            1f, -2f, 1f},
        {0f, -1f, 0f,
            -1f, 5f, -1f, //SHARPENALTO
            0f, -1f, 0f}
    };
   
    //Variable que indica si se ha modificado o no la imagen
    boolean modificado = false;
    //variable que indica si se abierto alguna imagen
    boolean imagenAbierta = false;
    //Vector de transformaciones a la imagen
    Vector transformaciones = new Vector();
    BufferedImage imagenSinModificar = null, imagenTransformada = null;
    BufferedImage iconoAplicacion;
    JButton bReestablecer = new JButton();
    JPanel jPanel1 = new JPanel();
    JButton bpasobajo = new JButton();
    JButton bRoberts = new JButton();
    JButton bSuavizado = new JButton();
    JPanel PanelSuavizados = new JPanel();
    JButton bmedia = new JButton();
    JLabel jLabel3 = new JLabel();
    JPanel PanelFronteras = new JPanel();
    JTabbedPane jTabbedPane1 = new JTabbedPane();
    FlowLayout flowLayout1 = new FlowLayout();
    FlowLayout flowLayout2 = new FlowLayout();
    JLabel jLabel4 = new JLabel();
    JButton bPrewitt = new JButton();
    JButton bSobel = new JButton();
    JButton bLaplaciano = new JButton();
    JButton bFreiChen = new JButton();
    JPanel PanelRealce = new JPanel();
    FlowLayout flowLayout3 = new FlowLayout();
    JButton bSharpenAlto = new JButton();
    JButton bSharpenBajo = new JButton();
    JLabel jLabel5 = new JLabel();
    JPanel jPanel2 = new JPanel();
    FlowLayout flowLayout4 = new FlowLayout();

    public EditorImagen() {
        super();
        try {
            Inicio();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    /**
     * Inicializacion de componentes.
     *
     * @throws java.lang.Exception
     */
    private void Inicio() throws Exception {
        this.sBrillo.setMajorTickSpacing(15);
        this.sBrillo.setMinorTickSpacing(5);
        this.sBrillo.setPaintTicks(true);
        sBrillo.setBorder(BorderFactory.createRaisedBevelBorder());
        this.sBrillo.setPaintLabels(true);

        //Creamos las etiquetas para el jslider
        Dictionary etiq = new Hashtable();

        etiq.put(new Integer(-255),
                new JLabel("+ Oscuridad"));

        for (int i = -225; i <= 225; i += 15) {
            etiq.put(new Integer(i), new JLabel(Integer.toString(i)));
        }

        etiq.put(new Integer(255),
                new JLabel("+ Claridad"));

        this.sBrillo.setLabelTable(etiq);

        this.jSPTapiz.setViewportView(this.PanelTapiz);
        this.iconoAplicacion = ImageIO.read(PaintMultimedia.class.getResource(
                "/imagenes/PaintMultimedia.png"));

        this.PanelTapiz.setImagen(this.iconoAplicacion);

        //Aplicamos los mnemonicos
        this.bSuavizado.setMnemonic(this.SUAVIZADO);
        this.bpasobajo.setMnemonic(this.PASOBAJO);
        this.bmedia.setMnemonic(this.MEDIA);
        this.bRoberts.setMnemonic(this.ROBERTS_H);
        this.bPrewitt.setMnemonic(this.PREWITT_H);
        this.bSobel.setMnemonic(this.SOBEL_H);
        this.bFreiChen.setMnemonic(this.FREICHEN_H);
        this.bLaplaciano.setMnemonic(this.LAPLACIANO);
        this.bSharpenBajo.setMnemonic(this.SHARPENBAJO);
        this.bSharpenAlto.setMnemonic(this.SHARPENALTO);

        jLabel2.setFont(new java.awt.Font("Tahoma", Font.BOLD, 12));
        jLabel2.setPreferredSize(new Dimension(123, 15));
        jLabel2.setHorizontalAlignment(SwingConstants.RIGHT);
        jLabel2.setHorizontalTextPosition(SwingConstants.RIGHT);
        jLabel2.setText("  Brillo de la imagen:");
        borderLayout4.setHgap(5);
        borderLayout6.setHgap(6);
        borderLayout6.setVgap(5);
        PanelImagen.setBorder(null);
        PanelImagen.setPreferredSize(new Dimension(700, 700));
        PanelImagen.setLayout(borderLayout2);

        sBrillo.setPaintTicks(true);
        sBrillo.setToolTipText("Modifica el brillo de la imagen");
        sBrillo.addChangeListener(new EditorImagen_sBrillo_changeAdapter(this));
        PanelBrillo.setLayout(borderLayout4);

        PanelFiltrosImagen.setLayout(borderLayout6);
        PanelTapiz.setBackground(new Color(238, 238, 238));
        PanelTapiz.setBorder(BorderFactory.createLineBorder(Color.black));
        jSPTapiz.setBorder(BorderFactory.createEtchedBorder());
        borderLayout2.setHgap(15);
        borderLayout2.setVgap(5);
        this.setLayout(borderLayout1);
        bReestablecer.setFont(new java.awt.Font("Tahoma", Font.BOLD, 11));
        bReestablecer.setPreferredSize(new Dimension(90, 23));
        bReestablecer.setToolTipText("Reestablece la imagen original");
        bReestablecer.setHorizontalTextPosition(SwingConstants.CENTER);
        bReestablecer.setMargin(new Insets(2, 5, 2, 5));
        bReestablecer.setText("Reestablecer");
        bReestablecer.addActionListener(new EditorImagen_bReestablecer_actionAdapter(this));
        jPanel1.setLayout(flowLayout4);
        jPanel1.setPreferredSize(new Dimension(95, 23));
        this.setBorder(null);
        bpasobajo.setFont(new java.awt.Font("Tahoma", Font.BOLD, 11));
        bpasobajo.setPreferredSize(new Dimension(120, 25));
        bpasobajo.setText("Filtro Paso Bajo");
        bpasobajo.addActionListener(new EditorImagen_bpasobajo_actionAdapter(this));
        bRoberts.setFont(new java.awt.Font("Tahoma", Font.BOLD, 11));
        bRoberts.setPreferredSize(new Dimension(110, 25));

        bRoberts.setText("Filtro Roberts");
        bRoberts.addActionListener(new EditorImagen_bRoberts_actionAdapter(this));
        bSuavizado.setFont(new java.awt.Font("Tahoma", Font.BOLD, 11));
        bSuavizado.setPreferredSize(new Dimension(120, 25));

        bSuavizado.setText("Suavizar");
        bSuavizado.addActionListener(new Transformaciones_actionAdapter(this));
        bmedia.setFont(new java.awt.Font("Tahoma", Font.BOLD, 11));
        bmedia.setPreferredSize(new Dimension(120, 25));

        bmedia.setText("Media");
        bmedia.addActionListener(new EditorImagen_bmedia_actionAdapter(this));
        PanelSuavizados.setBorder(null);
        PanelSuavizados.setInputVerifier(null);
        PanelSuavizados.setLayout(flowLayout1);
        jLabel3.setFont(new java.awt.Font("Tahoma", Font.BOLD, 11));
        jLabel3.setBorder(null);
        jLabel3.setText("Filtros Difuminado:");
        PanelFronteras.setBorder(BorderFactory.createEtchedBorder());
        PanelFronteras.setLayout(flowLayout2);
        jTabbedPane1.setFont(new java.awt.Font("Tahoma", Font.BOLD, 11));
        jTabbedPane1.setForeground(new Color(205, 44, 22));
        jTabbedPane1.setBorder(null);
        jTabbedPane1.setPreferredSize(new Dimension(150, 80));
        flowLayout1.setAlignment(FlowLayout.LEFT);
        flowLayout1.setHgap(15);
        flowLayout1.setVgap(12);
        jLabel4.setFont(new java.awt.Font("Tahoma", Font.BOLD, 11));
        jLabel4.setText("Fronteras:");
        flowLayout2.setAlignment(FlowLayout.LEFT);
        flowLayout2.setHgap(10);
        flowLayout2.setVgap(12);
        bPrewitt.setFont(new java.awt.Font("Tahoma", Font.BOLD, 11));
        bPrewitt.setPreferredSize(new Dimension(110, 25));
        bPrewitt.setText("Filtro Prewitt");
        bPrewitt.addActionListener(new EditorImagen_bPrewitt_actionAdapter(this));
        bSobel.setFont(new java.awt.Font("Tahoma", Font.BOLD, 11));
        bSobel.setPreferredSize(new Dimension(110, 25));
        bSobel.setText("Filtro Sobel");
        bSobel.addActionListener(new EditorImagen_bSobel_actionAdapter(this));
        bLaplaciano.setFont(new java.awt.Font("Tahoma", Font.BOLD, 11));
        bLaplaciano.setPreferredSize(new Dimension(110, 25));
        bLaplaciano.setMargin(new Insets(2, 5, 2, 5));
        bLaplaciano.setText("Filtro Laplaciano");
        bLaplaciano.addActionListener(new EditorImagen_bLaplaciano_actionAdapter(this));
        bFreiChen.setFont(new java.awt.Font("Tahoma", Font.BOLD, 11));
        bFreiChen.setPreferredSize(new Dimension(110, 25));
        bFreiChen.setMargin(new Insets(2, 10, 2, 10));
        bFreiChen.setText("Filtro Frei-Chen");
        bFreiChen.addActionListener(new EditorImagen_bFreiChen_actionAdapter(this));
        borderLayout1.setVgap(10);
        PanelRealce.setLayout(flowLayout3);
        flowLayout3.setAlignment(FlowLayout.LEFT);
        flowLayout3.setHgap(15);
        flowLayout3.setVgap(12);
        bSharpenAlto.setFont(new java.awt.Font("Tahoma", Font.BOLD, 11));
        bSharpenAlto.setPreferredSize(new Dimension(105, 25));
        bSharpenAlto.setText("Sharpen alto");
        bSharpenAlto.addActionListener(new EditorImagen_bSharpenAlto_actionAdapter(this));
        bSharpenBajo.setFont(new java.awt.Font("Tahoma", Font.BOLD, 11));
        bSharpenBajo.setPreferredSize(new Dimension(107, 25));
        bSharpenBajo.setText("Sharpen Bajo");
        bSharpenBajo.addActionListener(new EditorImagen_bSharpenBajo_actionAdapter(this));
        jLabel5.setFont(new java.awt.Font("Tahoma", Font.BOLD, 11));
        jLabel5.setText("Filtros de Realce de Imagen:");
        PanelBrillo.setPreferredSize(new Dimension(328, 55));
        flowLayout4.setHgap(3);
        flowLayout4.setVgap(15);
        PanelImagen.add(jSPTapiz, java.awt.BorderLayout.CENTER);
        this.add(PanelImagen, java.awt.BorderLayout.CENTER);
        PanelBrillo.add(jLabel2, java.awt.BorderLayout.WEST);
        PanelBrillo.add(sBrillo, java.awt.BorderLayout.CENTER);
        jPanel1.add(bReestablecer, null);
        PanelFiltrosImagen.add(jPanel1, java.awt.BorderLayout.EAST);
        PanelSuavizados.add(jLabel3);
        PanelSuavizados.add(bpasobajo);
        PanelSuavizados.add(bmedia);
        PanelSuavizados.add(bSuavizado);
        PanelFronteras.add(jLabel4);
        PanelFronteras.add(bRoberts);
        PanelFronteras.add(bPrewitt);
        PanelFronteras.add(bSobel);
        PanelFronteras.add(bFreiChen);
        PanelFronteras.add(bLaplaciano);
        jTabbedPane1.add(PanelSuavizados, "PanelSuavizados", 0);
        jTabbedPane1.add(PanelFronteras, "Detección de Fronteras", 1);
        jTabbedPane1.add(PanelRealce, "Realce de imagen", 2);
        PanelRealce.add(jLabel5);
        PanelRealce.add(bSharpenBajo);
        PanelRealce.add(bSharpenAlto);
        PanelImagen.add(PanelFiltrosImagen, java.awt.BorderLayout.SOUTH);
        PanelFiltrosImagen.add(PanelBrillo, java.awt.BorderLayout.CENTER);
        PanelFiltrosImagen.add(jTabbedPane1, java.awt.BorderLayout.NORTH);
        PanelFiltrosImagen.add(jPanel2, java.awt.BorderLayout.SOUTH);
    }

    /**
     *
     * @return Si ha tenido exito
     */
    public boolean CargarImagen() {
        boolean error = false;

        JFileChooser selecc_fichero = new JFileChooser();
        FiltroArchivos jpgs, gif, png, bmp, todas_imagenes;

        selecc_fichero.setDialogType(JFileChooser.OPEN_DIALOG);

        //Quitamos la opcion de que acepte todos los archivos
        selecc_fichero.setAcceptAllFileFilterUsed(false);

        //Seleccionamos el tipo de archivos que queremos
        jpgs = new FiltroArchivos(new String[]{"jpg", "jpeg", "jpe"},
                "Archivos de tipo Jpeg");
        png = new FiltroArchivos("png",
                "Tipo de imagen png, Portable network graphics");
        gif = new FiltroArchivos("gif",
                "Tipo de imagen gif, Formato de intercambio de gráficos");

        bmp = new FiltroArchivos("bmp", "Imagen mapa de bits");

        todas_imagenes = new FiltroArchivos(new String[]{"jpg", "jpeg", "jpe",
                    "png", "gif"},
                "Todos los formatos de imagen validos");
        //Aplicamos los filtros al filechooser
        selecc_fichero.addChoosableFileFilter(jpgs);
        selecc_fichero.addChoosableFileFilter(gif);
        selecc_fichero.addChoosableFileFilter(png);
        selecc_fichero.addChoosableFileFilter(bmp);
        selecc_fichero.addChoosableFileFilter(todas_imagenes);

        int valor = selecc_fichero.showOpenDialog(this);

        //Obtenemos el path del archivo
        if (valor == JFileChooser.APPROVE_OPTION) {
            //Cerramos la imagen si hubiera alguna ya abierta
            if (this.CerrarImagen()) {
                BufferedImage imagenLeida = null;

                //Abrimos la imagen del disco
                try {
                    imagenLeida = ImageIO.read(selecc_fichero.getSelectedFile());
                } catch (IOException ex) {
                    System.out.println(ex.getMessage());
                    error = true;
                }

                //Comprobamos si se ha leido correctamente la imagen
                if (imagenLeida != null) {
                    try {
                        MediaTracker tracker = new MediaTracker(this);
                        tracker.addImage(imagenLeida, 0);
                        tracker.waitForID(0);
                    } catch (Exception e) {
                        System.out.println(e.getMessage());
                        error = true;
                    }

                    //Copiamos en la imagen de la clase la imagen leida transformandola a RGB o a ARGB si posee alpha
                    if (imagenLeida.getColorModel().hasAlpha()) {
                        this.imagenSinModificar = new BufferedImage(imagenLeida.getWidth(), imagenLeida.getHeight(),
                                BufferedImage.TYPE_INT_ARGB);
                    } else {
                        this.imagenSinModificar = new BufferedImage(imagenLeida.getWidth(), imagenLeida.getHeight(),
                                BufferedImage.TYPE_INT_RGB);
                    }

                    //Hacemos otra copia para almacenar la imagen que se modificara
                    this.imagenTransformada = new BufferedImage(this.imagenSinModificar.getWidth(),
                            this.imagenSinModificar.getHeight(),
                            this.imagenSinModificar.getType());

                    //Copiamos tanto en la imagen modificada como en la sin modificar
                    Graphics2D grImagenSinM = this.imagenSinModificar.createGraphics();
                    grImagenSinM.drawImage(imagenLeida, 0, 0, this.PanelTapiz);

                    Graphics2D grImagenM = this.imagenTransformada.createGraphics();
                    grImagenM.drawImage(imagenLeida, 0, 0, this.PanelTapiz);

                    /* byte chlut[] = new byte[256];
                    for (int j = 0; j < 200; j++)
                    chlut[j] = (byte) (256 - j);
                    ByteLookupTable blut = new ByteLookupTable(0, chlut);
                    LookupOp lop = new LookupOp(blut, null);
                    lop.filter(this.imagenSinModificar, this.imagenModificada);
                     */

                    //Establecemos una nueva imagen para el tapiz una vez cargada
                    this.PanelTapiz.setImagen(this.imagenTransformada);

                    //Ponemos la variable de modificado a false
                    this.modificado = false;

                    //Ponemos la variable de imagen abierta a true
                    this.imagenAbierta = true;

                    return true;
                } else {
                    error = true;
                }
            }

            //Si ha habido un error mostramos el mensaje
            if (error) {
                //No se puede abrir el archivo
                JOptionPane.showMessageDialog(this,
                        "No se puede abrir el archivo",
                        "Error",
                        JOptionPane.ERROR_MESSAGE);
            }
        }

        return false;
    }

    /**
     *
     * @return Si se ha cerrado la imagen
     */
    public boolean CerrarImagen() {
        boolean borrar = false;

        if (this.modificado) {
            //Mostramos el dialogo de confirmacion
            int opcion = JOptionPane.showConfirmDialog(this,
                    "Los cambios NO han sido guardados, ¿Desea guardar los cambios ahora?",
                    "ATENCIÓN", JOptionPane.YES_NO_CANCEL_OPTION,
                    JOptionPane.WARNING_MESSAGE);

            //Cerramos la imagen si ha dicho que no quiere guardar los cambios
            if (opcion == JOptionPane.NO_OPTION) {
                borrar = true;
            } else if (opcion == JOptionPane.YES_OPTION) {
                //Guardamos el fichero si ha aceptado
                if (this.GuardarImagen()) {
                    borrar = true;
                } else {
                    borrar = false;
                }
            }
        } //Caso en el que no esta modificada la imagen se cierra sin confirmacion
        else {
            borrar = true;
        }

        //Comprobamos si hay que borrar o no la imagen
        if (borrar) {
            //Eliminamos las imagenes
            this.imagenTransformada = null;
            this.imagenSinModificar = null;

            //Borramos el vector
            this.transformaciones.removeAllElements();

            //Establecemos por defecto otra vez todos las variables
            this.modificado = false;
            this.imagenAbierta = false;

            //Reestablecemos el icono de la aplicacion
            this.PanelTapiz.setImagen(this.iconoAplicacion);

            //Establecemos otra vez el icono de la aplicacion
            this.PanelTapiz.setImagen(this.iconoAplicacion);

            //Liberamos la memoria no utilizada
            System.gc();
            System.runFinalization();

            return true;
        }

        return false;
    }

    /**
     *
     * @return Si se ha guardado la imagen con exito
     */
    public boolean GuardarImagen() {
        if (this.modificado) {
            JFileChooser archivo = new JFileChooser();
            archivo.setDialogTitle("Guardar imagen como ...");
            archivo.setDialogType(JFileChooser.SAVE_DIALOG);

            //Quitamos la opcion de que acepte todos los archivos
            archivo.setAcceptAllFileFilterUsed(false);

            FiltroArchivos jpgs, png;
            boolean error = false;

            //Seleccionamos el tipo de archivos que queremos
            jpgs = new FiltroArchivos(new String[]{"jpg", "jpeg", "jpe"},
                    "Archivos de tipo Jpeg");
            png = new FiltroArchivos("png",
                    "Tipo de imagen png, Portable network graphics");

            archivo.addChoosableFileFilter(jpgs);
            archivo.addChoosableFileFilter(png);

            //Preguntamos al usuario el destino y nombre del archivo
            int guardar = archivo.showSaveDialog(this);

            if (guardar == JFileChooser.APPROVE_OPTION) {
                File destino = archivo.getSelectedFile();

                //Comprobamos el tipo elegido
                if (archivo.getFileFilter().equals(png)) {
                    //Guardamos en formato png
                    File destinoPNG = new File(destino.getPath() + ".png");
                    if (!destinoPNG.exists()) {
                        try {
                            ImageIO.write(this.imagenTransformada, "png",
                                    destinoPNG);
                            return true;
                        } catch (IOException ex1) {
                            System.out.println(ex1.getMessage());
                            error = true;
                        }
                    } else {
                        //Preguntamos si sobreescribir el archivo
                        int eleccion = JOptionPane.showConfirmDialog(this,
                                "CUIDADO: el archivo ya existe, ¿Desea sobreescribirlo?",
                                "SOBREESCRIBIR", JOptionPane.YES_NO_OPTION,
                                JOptionPane.WARNING_MESSAGE);
                        if (eleccion == JOptionPane.YES_OPTION) {
                            //Sobreescribimos el archivo
                            try {
                                ImageIO.write(this.imagenTransformada, "png",
                                        destinoPNG);
                                return true;
                            } catch (IOException ex1) {
                                System.out.println(ex1.getMessage());
                                error = true;
                            }
                        }
                    }
                } else {
                    //Guardamos en formato jpg
                    File destinoJPEG = new File(destino.getPath()
                            + ".jpg");
                    if (!destinoJPEG.exists()) {
                        //Guardamos la nueva imagen
                        try {
                            FileOutputStream out = new FileOutputStream(
                                    destinoJPEG);
                            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);

                            encoder.encode(this.imagenTransformada);
                            out.close();
                            return true;
                        } catch (Exception ex) {
                            System.out.println(ex.getMessage());
                            error = true;
                        }
                    } else {
                        //Preguntamos si sobreescribir el archivo
                        int eleccion = JOptionPane.showConfirmDialog(this,
                                "CUIDADO: el archivo ya existe, ¿Desea sobreescribirlo?",
                                "SOBREESCRIBIR", JOptionPane.YES_NO_OPTION,
                                JOptionPane.WARNING_MESSAGE);

                        //Sobreescribimos el archivo
                        if (eleccion == JOptionPane.YES_OPTION) {
                            try {
                                FileOutputStream out = new FileOutputStream(
                                        destinoJPEG);

                                JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);

                                encoder.encode(this.imagenTransformada);
                                out.close();
                                this.modificado = false;

                                return true;
                            } catch (Exception ex) {
                                System.out.println(ex.getMessage());
                                error = true;
                            }
                        }
                    }
                }

                //Si ha habido un error mostramos el mensaje
                if (error) {
                    //No se puede escribir el archivo
                    JOptionPane.showMessageDialog(this,
                            "No se puede escribir el archivo",
                            "Error",
                            JOptionPane.ERROR_MESSAGE);
                }
            }
        }

        return false;
    }

    /**
     *
     * @param e Evento
     */
    public void sBrillo_stateChanged(ChangeEvent e) {
        //Comprobamos que se ha cargado una imagen
        if (this.imagenAbierta) {
            RescaleOp rop = new RescaleOp(1.0f,
                    (float) this.sBrillo.getValue(), null);
            BufferedImage aux = new BufferedImage(this.imagenSinModificar.getWidth(),
                    this.imagenSinModificar.getHeight(),
                    this.imagenSinModificar.getType());

            //Aplicamos el filtro de brillo a la imagen transformada por los filtros
            rop.filter(this.imagenTransformada, aux);

            //Establecemos la nueva imagen a mostrar
            this.PanelTapiz.setImagen(aux);

            //Ponemos que se ha modificado la imagen
            this.modificado = true;
        }
    }

    /**
     *
     * @param e Evento
     */
    public void bReestablecer_actionPerformed(ActionEvent e) {
        if (this.imagenAbierta) {
            //Ponemos de nuevo la imagen
            this.sBrillo.setValue(0);

            //Copiamos de nuevo la imagen en modificada
            Graphics2D grImagenM = this.imagenTransformada.createGraphics();
            grImagenM.drawImage(this.imagenSinModificar, 0, 0, this.PanelTapiz);

            this.modificado = false;
            this.PanelTapiz.setImagen(this.imagenTransformada);

            //Borramos el vector de transformaciones
            this.transformaciones.removeAllElements();
        }
    }

    /**
     *
     * @param e Evento
     */
    public void Transformaciones_actionPerformed(ActionEvent e) {
        //Comprobamos que se ha cargado una imagen
        if (this.imagenAbierta) {
            int transf = ((JButton) e.getSource()).getMnemonic();

            Kernel kernel = new Kernel(3, 3, this.TRANSFORMACIONES[transf]);
            ConvolveOp cop = new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, null);

            //Añadimos al vector de transformaciones la operacion
            this.transformaciones.addElement(transf);

            BufferedImage aux = new BufferedImage(this.imagenSinModificar.getWidth(),
                    this.imagenSinModificar.getHeight(),
                    this.imagenSinModificar.getType());

            //Aplicamos la transformacion
            cop.filter(this.imagenTransformada, aux);
            this.imagenTransformada = aux;

            //Comprobamos si es una transformacion de deteccion de fronteras
            //en cuyo caso tenemos que repetir la convolucion pero ahora en vertical
            if (transf >= this.ROBERTS_H && transf <= this.FREICHEN_H) {
                Kernel kernel2 = new Kernel(3, 3,
                        this.TRANSFORMACIONES[transf + 1]);
                ConvolveOp cop2 = new ConvolveOp(kernel2, ConvolveOp.EDGE_NO_OP, null);
                BufferedImage aux2 = new BufferedImage(this.imagenSinModificar.getWidth(),
                        this.imagenSinModificar.getHeight(),
                        this.imagenSinModificar.getType());
                cop2.filter(this.imagenTransformada, aux2);
                this.imagenTransformada = aux2;
            }

            //Llamamos al brillo para que se le sume el brillo a la imagen dejando intacta
            //la de transformaciones
            sBrillo_stateChanged(new ChangeEvent(this));

            //Liberamos la memoria no utilizada
            System.gc();
            System.runFinalization();

            this.modificado = true;
        }
    }

    class EditorImagen_bSharpenAlto_actionAdapter implements ActionListener {

        private EditorImagen adaptee;

        EditorImagen_bSharpenAlto_actionAdapter(EditorImagen adaptee) {
            this.adaptee = adaptee;
        }

        public void actionPerformed(ActionEvent e) {
            adaptee.Transformaciones_actionPerformed(e);
        }
    }

    class EditorImagen_bSharpenBajo_actionAdapter implements ActionListener {

        private EditorImagen adaptee;

        EditorImagen_bSharpenBajo_actionAdapter(EditorImagen adaptee) {
            this.adaptee = adaptee;
        }

        public void actionPerformed(ActionEvent e) {
            adaptee.Transformaciones_actionPerformed(e);
        }
    }

    class EditorImagen_bPasoAlto_actionAdapter implements ActionListener {

        private EditorImagen adaptee;

        EditorImagen_bPasoAlto_actionAdapter(EditorImagen adaptee) {
            this.adaptee = adaptee;
        }

        public void actionPerformed(ActionEvent e) {
            adaptee.Transformaciones_actionPerformed(e);
        }
    }

    class EditorImagen_bLaplaciano_actionAdapter implements ActionListener {

        private EditorImagen adaptee;

        EditorImagen_bLaplaciano_actionAdapter(EditorImagen adaptee) {
            this.adaptee = adaptee;
        }

        public void actionPerformed(ActionEvent e) {
            adaptee.Transformaciones_actionPerformed(e);
        }
    }

    class EditorImagen_bFreiChen_actionAdapter implements ActionListener {

        private EditorImagen adaptee;

        EditorImagen_bFreiChen_actionAdapter(EditorImagen adaptee) {
            this.adaptee = adaptee;
        }

        public void actionPerformed(ActionEvent e) {
            adaptee.Transformaciones_actionPerformed(e);
        }
    }

    class EditorImagen_bSobel_actionAdapter implements ActionListener {

        private EditorImagen adaptee;

        EditorImagen_bSobel_actionAdapter(EditorImagen adaptee) {
            this.adaptee = adaptee;
        }

        public void actionPerformed(ActionEvent e) {
            adaptee.Transformaciones_actionPerformed(e);
        }
    }

    class EditorImagen_bmedia_actionAdapter implements ActionListener {

        private EditorImagen adaptee;

        EditorImagen_bmedia_actionAdapter(EditorImagen adaptee) {
            this.adaptee = adaptee;
        }

        public void actionPerformed(ActionEvent e) {
            adaptee.Transformaciones_actionPerformed(e);
        }
    }

    class EditorImagen_bpasobajo_actionAdapter implements ActionListener {

        private EditorImagen adaptee;

        EditorImagen_bpasobajo_actionAdapter(EditorImagen adaptee) {
            this.adaptee = adaptee;
        }

        public void actionPerformed(ActionEvent e) {
            adaptee.Transformaciones_actionPerformed(e);
        }
    }

    class EditorImagen_bRoberts_actionAdapter implements ActionListener {

        private EditorImagen adaptee;

        EditorImagen_bRoberts_actionAdapter(EditorImagen adaptee) {
            this.adaptee = adaptee;
        }

        public void actionPerformed(ActionEvent e) {
            adaptee.Transformaciones_actionPerformed(e);
        }
    }

    class EditorImagen_bPrewitt_actionAdapter implements ActionListener {

        private EditorImagen adaptee;

        EditorImagen_bPrewitt_actionAdapter(EditorImagen adaptee) {
            this.adaptee = adaptee;
        }

        public void actionPerformed(ActionEvent e) {
            adaptee.Transformaciones_actionPerformed(e);
        }
    }

    class Transformaciones_actionAdapter implements ActionListener {

        private EditorImagen adaptee;

        Transformaciones_actionAdapter(EditorImagen adaptee) {
            this.adaptee = adaptee;
        }

        public void actionPerformed(ActionEvent e) {
            adaptee.Transformaciones_actionPerformed(e);
        }
    }

    class EditorImagen_bReestablecer_actionAdapter implements ActionListener {

        private EditorImagen adaptee;

        EditorImagen_bReestablecer_actionAdapter(EditorImagen adaptee) {
            this.adaptee = adaptee;
        }

        public void actionPerformed(ActionEvent e) {
            adaptee.bReestablecer_actionPerformed(e);
        }
    }

    class EditorImagen_sBrillo_changeAdapter implements ChangeListener {

        private EditorImagen adaptee;

        EditorImagen_sBrillo_changeAdapter(EditorImagen adaptee) {
            this.adaptee = adaptee;
        }

        public void stateChanged(ChangeEvent e) {
            adaptee.sBrillo_stateChanged(e);
        }
    }
}
TOP

Related Classes of paintmultimedia.EditorImagen$EditorImagen_bmedia_actionAdapter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.