Traitement d'image dans une applet

cs_maettep Messages postés 1 Date d'inscription jeudi 6 mars 2008 Statut Membre Dernière intervention 6 mars 2008 - 6 mars 2008 à 11:19
 Utilisateur anonyme - 6 mars 2008 à 12:36
Bonjour voilà il nous est demandé de réaliser une interface graphique qui charge une image et qui réalise des modifications dessus à l'aide de boutons le tout passant par un applet.
J'ai réalisé mon interface y a pas de problème, ce que j'essaye de faire c'est à  l'aide d'un menubar de charger n'importe qu'elle image de mon disque dur. Pour ça je suis passer
par l'appel de FileDialog, le problème c'est que lorsque je lance mon applet que je fais fichier ouvrir et que je vais chercher mon image il n'y a absolument rien qui s'affiche dans mon interface. Je pense que mon code est bon car en JFrame tout marche nikel mon image apparait bien là où elle doit être. Je pense que ça vient de l'applet mais j'arrive pas à savoir exactement ce qui merdouille.
Je passe par une classe Agrandissement pour réaliser l'affichage de mon image sur le coté gauche de mon interface, cela est nécessaire car si l'image est trop grande par rapport au panel qui la reçoit celle si devra être redimensionnée, il est possible que mon problème vienne de là, mais je ne sais pas comment le résoudre. si quelqu'un à une méthode plus simple que ma class Agradissement pour charger mon image je suis preneur.

code :

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.math.*;
import java.io.*;
import javax.imageio.*;
import java.awt.image.*;
import java.applet.Applet;
import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp;

       
public class im extends JApplet {
   
    JPanel grospanel;
    JPanel panel;
    BufferedImage img; 
    JLabel ima;
    JPanel P;
   
    public void init() {
       
        /*****************                interface graphique                     ********************/
       
        grospanel = new JPanel(); // définition du panel général
          grospanel.setLayout(new BorderLayout());// division du panel en zone géographique
       
        panel = new JPanel(); // définition d'un nouveau panel
        panel.setPreferredSize(new Dimension(200,400)); // définition de la taille de ce panel
        GridLayout grille = new GridLayout(12,0); // définition d'une grille de 12 lignes et 0 colonne
        panel.setLayout(grille); // ajoue de cette grille au panel
       
        /****************                 création des titres et boutons de l'interface       ****************/
               
        JLabel titre_frequence = new JLabel("Niveau de modification");
        panel.add(titre_frequence);
       
        JSlider reglage_frequence = new JSlider();
        panel.add(reglage_frequence);
               
        JLabel titre_filtre = new JLabel("Type de Modification");
        panel.add(titre_filtre);
       
        ButtonGroup filtre = new ButtonGroup();
        JRadioButton aucun = new JRadioButton("Aucun",true);
        JRadioButton luminance = new JRadioButton("Luminance",false);
        JRadioButton aggrandissement = new JRadioButton("Aggrandissement",false);
        JRadioButton translation = new JRadioButton("Translation",false);
        JRadioButton rotation = new JRadioButton("Rotation",false);
        JRadioButton convolution = new JRadioButton("Convolution",false);
        JRadioButton couleur = new JRadioButton("Couleur",false);
        filtre.add(aucun);
        filtre.add(luminance);
        filtre.add(aggrandissement);
        filtre.add(translation);
        filtre.add(rotation);
        filtre.add(convolution);
        filtre.add(couleur);
        panel.add(aucun);
        panel.add(luminance);
        panel.add(aggrandissement);
        panel.add(translation);
        panel.add(rotation);
        panel.add(convolution);
        panel.add(couleur);

        JButton boutonImage = new JButton("Image d'origine");
        panel.add(boutonImage);
        JButton boutonModifier = new JButton("Modifier l'image");
        panel.add(boutonModifier);
        grospanel.add(panel,BorderLayout.EAST);
        JPanel panel2 = new JPanel();
           
        /**********************            crétion d'un menu bar           ***********************/
       
        JMenuBar MonMenu = new JMenuBar();   
           grospanel.add(MonMenu,BorderLayout.NORTH);
        JMenu Fichier = new JMenu("Fichier");   
        JMenuItem Ouvrir = new JMenuItem("Ouvrir...");
        JMenuItem Save = new JMenuItem("Enregistrer");
        JMenuItem Save_as = new JMenuItem("Enregistrer sous");   
        JMenuItem Fermer = new JMenuItem("Fermer");
       
        Fichier.add(Ouvrir);
        Fichier.add(Save);
        Fichier.add(Save_as);
        Fichier.add(Fermer);
        MonMenu.add(Fichier);
       
        P = new JPanel();
        ima = new JLabel();// ima reçoit l'image sélectionnée
        P.add(ima);//ajoue de ima au panel P
                                      
           grospanel.add(P,BorderLayout.WEST); // ajoue de P à gauche du panel général grospanel
          
          
          
           /*************          Actions executables par l'interface      *********************/
           
               Ouvrir.addActionListener(new ActionListener(){
                       public void actionPerformed(ActionEvent e){
                             
                                       FileDialog fd = new FileDialog(new JFrame());//appel de FileDialog
                                       fd.setVisible(true);
                                       float s = 0;
                                       float r1 = 0;
                                       float r2 = 0;
                                                                       
                                                                            
                                           try{                                      
                                           img = ImageIO.read(new File (fd.getDirectory()+fd.getFile()));// stockage du fichier sélectionné dans img
                                           }
                                           catch(IOException exc){
                                               exc.printStackTrace();
                                           }  
                                              
                                           Agrandissement opagran = new Agrandissement(); // définition de l'opérateur opagran de type Agradissement
                                      
                                           float width = img.getWidth(); // récupération de la longueur de l'image source
                                           float height = img.getHeight();// récupération de la hauteur de l'image source
                                          
          /*******     suivant l'image source on redéfinit sa taille pour qu'elle colle au label de 900 par 600   ******/
                                        
                                           if (width>900){                                          
                                           r1 = 900/width;                                                                                    
                                            }
                                           
                                               if (height>600){                                          
                                           r2 = 600/height;        
                                            }
                                           
                                            if (r1>r2){
                                            s = r2;
                                            }
                                           
                                            else {
                                            s = r1;
                                            }
                                                                                                                
                                           opagran.agrandImage(img,s);//application du retaillage de mon image suivant le ratio s
                                      
                                            ima = new JLabel(new ImageIcon(opagran.ImageTraitee));// récupération de ImageTraitee redimensionnée et placement dans un
                                            P.add(ima);
                                            
                                       //    setSize(new Dimension(getWidth()+1, getHeight()));
                                      
                                           setVisible(true);   
                                               }});  
                                                                        
                                      
                                      
                                      
                                      
            Fermer.addActionListener(new ActionListener(){
                    public void actionPerformed(ActionEvent e){   
                        System.exit(0);
                        }    });     
   
            add(grospanel);
    }
}
   
   
   
   
       
class Agrandissement{
   
    public BufferedImage ImageTraitee;
   
    // Traitement à effectuer (Filtrage, rehaussement de contraste, transformation géométrique, etc.)
    public void agrandImage(BufferedImage Entree,float scale)
    {       
           //ImageTraitee =Entree;
           // Récupération de la largeur et de la hauteur de l'image "input"
           int width = Entree.getWidth();
           int height = Entree.getHeight();
      
        //Agrandissement
        AffineTransform retailler;
       
        ImageTraitee = new BufferedImage((int)(width*scale),(int)(height*scale), Entree.getType());

        retailler = AffineTransform.getScaleInstance(scale,scale);       
        AffineTransformOp retaillerImage = new AffineTransformOp(retailler, null);
       
        // On applique la transformation d'agrandissement
        retaillerImage.filter(Entree, ImageTraitee);
       
           System.out.println("Image Traitee");
         //return ImageTraitee;
    }
}

 code applet :

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
    <head>
    </head>
   
        <center>
           
           
        </center>
   
</html>

1 réponse

Utilisateur anonyme
6 mars 2008 à 12:36
Pourquoi n'utilises-tu pas plutôt JFileChooser???

TUER : http://tuer.tuxfamily.org/tuer.php

yeah! vive java
0
Rejoignez-nous