cs_maettep
Messages postés1Date d'inscriptionjeudi 6 mars 2008StatutMembreDerniè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.
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");
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);
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);