Affichage image /execution donne rien

najah01_3 Messages postés 35 Date d'inscription dimanche 24 septembre 2006 Statut Membre Dernière intervention 17 juillet 2007 - 1 oct. 2006 à 13:51
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 - 3 févr. 2007 à 15:14
Bonbjour ,
j ai deux questions a vous poser :

1- j ai un programme qui affiche une image , il se compile . quand j execute ca donne rien (ni frame vide , ni rien)

2-est ce que un programme qui marche dans jdk1.2 marche dans jdk1.5 ? et vice versa ?
mon programme est :

import java.awt.* ;
import java.awt.event.* ;
import javax.swing.*  ;
import java.io.*;
import javax.imageio.* ;
import java.awt.image.* ;




public class AfficheImage {


   static Tableau frame ;
       public static void main ( String[] args ) {
       frame = new Tableau() ;
       frame.setVisible(true) ;
       }
       }
    class Tableau extends JFrame {  
   
      static final Dimension screensize =
      Toolkit.getDefaultToolkit().getScreenSize();
       //static final int largeurEcran = screensize.width;
       //static final int hauteurEcran = screensize.height + 2;
        int largeurEcran = 800;
        int hauteurEcran = 900;
     
     int l = 400 ;
      int h = 300 ;
      Container pane ;
     
      public Tableau() {
       super() ;
       pane = getContentPane();
       pane.setLayout(new FlowLayout());
       this.addWindowListener(new WindowAdapter() {
        public void windowClosing(WindowEvent e)  {
         System.exit(0) ;
        }});
      setBounds ((largeurEcran -l) / 2,
                      (hauteurEcran-h) / 2,l,h);
       
                      
              PhotoCanvas photo = new PhotoCanvas("lena.JPEG") ;
              l = photo.getWidth();
    h = photo.getHeight();
    setBounds((largeurEcran - l) / 2,
(hauteurEcran - h) / 2, l, h);
              pane.add(photo);
       }
}


class PhotoCanvas extends Canvas {
 Image img ;
 
public PhotoCanvas ( String s )  {
 setSize (400,300 );
 img = getToolkit().getImage(s) ;
 MediaTracker tracker = new MediaTracker(this);
tracker.addImage(img, 0);
try {
tracker.waitForAll();
}
catch(InterruptedException e) {
System.out.println(e);
}
setSize(img.getWidth(this),
img.getHeight(this));
 
}
public void paint(Graphics g)  {
 g.drawImage(img,0,0,this);
}
}             
     
     

11 réponses

didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 2
1 oct. 2006 à 14:17
Salut,
En ce qui conserne ta deuxieme question, ca depend:
 -> si tu compile avec le 1.5 ca ne marchera pas sur le 1.2
-> si tu compile avec le 1.2 ca devrais  marcher avgec le 1.5

+
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
1 oct. 2006 à 18:21
Salut,

ne mélange JAMAIS awt et swing dans tes composants graphique donc 2 solution pour ton truc :
1 - avec JPanel

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.MediaTracker;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class AfficheImage {

    public static void main(String[] args) {
        new Tableau().setVisible(true);
    }
}

class Tableau extends JFrame {

    private static final long serialVersionUID = -1654172985512850048L;
    private static final Dimension SIZE = new Dimension(400, 300);

    public Tableau() {
        super();
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(SIZE.width, SIZE.height);
        PhotoCanvas photo = new PhotoCanvas("lena.JPEG");
        setContentPane(photo);
    }
}

class PhotoCanvas extends JPanel {

    private static final long serialVersionUID = -425196446497911425L;

    private Image img;

    public PhotoCanvas(String s) {
        img = getToolkit().getImage(s);
        MediaTracker tracker = new MediaTracker(this);
        tracker.addImage(img, 0);
        try {
            tracker.waitForAll();
        } catch (InterruptedException e) {
            System.out.println(e);
        }
    }

    public void paintComponent(Graphics g) {
        super.paintComponents(g);
        g.drawImage(img, 0, 0, this);
    }
}            

2 - Avec un JLabel(le mieux tu peux meme lui rajouter des composants dedans
import java.awt.Dimension;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class AfficheImage {

    public static void main(String[] args) {
        new Tableau().setVisible(true);
    }
}

class Tableau extends JFrame {

    private static final long serialVersionUID = -1654172985512850048L;
    private static final Dimension SIZE = new Dimension(400, 300);

    public Tableau() {
        super();
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(SIZE.width, SIZE.height);
        //init de l'image.
        ImageIcon image = new ImageIcon("lena.JPEG");
        image.getImage();//plus ou moins equivalent au mediatracker
        JLabel photo = new JLabel(image);
        setContentPane(photo);
    }
}            
     

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
najah01_3 Messages postés 35 Date d'inscription dimanche 24 septembre 2006 Statut Membre Dernière intervention 17 juillet 2007
2 oct. 2006 à 13:19
Mecri beaucoup Twinuts de votre aide ,


j ai essayé avec vos 2 solution mais ca pas marché encore
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
2 oct. 2006 à 14:56
Salut,

tu as fais quoi? un bout de code? qu je puisse voir pourquoi cela ne fonctionne toujours pas

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
najah01_3 Messages postés 35 Date d'inscription dimanche 24 septembre 2006 Statut Membre Dernière intervention 17 juillet 2007
3 oct. 2006 à 12:52
les troix programme affiche la meme chose (ecran vide) .les trois programme sont affichés ci dessus .
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
3 oct. 2006 à 12:59
Salut,

après avoir testé (hihi j'ai pas testé les codes posté :P)
les codes 1 et 2 fonctionnent très bien donc cela peut venir de ton image, de son emplacement ou autre(j'en ai posté 2 pas 3 ;) )

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
najah01_3 Messages postés 35 Date d'inscription dimanche 24 septembre 2006 Statut Membre Dernière intervention 17 juillet 2007
3 oct. 2006 à 14:22
salut twinus ,


ca marche maintenant , il y avait 2 problems :


-la configuration de PAth : j ai configuré PATH sous Dos .


-j ai mis "lena.jpg" au lieu " lena.JPEG"


la prochiane etape pour moi et est de :


acces au differents pixels ,detection de contour , suivi de contour , calcul de surface et calcul de distance .


si vous pouvez m aider je serai reconnaissant .
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
3 oct. 2006 à 14:45
Salut,

ok.....

exemple sans JAI(Java Advanced Imaging) mais tu peux te renseigner dessus
bon pour l'acces aux pixels tu peux utiliser PixelGrabber idem pour récup. tous les pixels de ton image (ref javadoc)
//ici on recup tous les pixels de l'image
/**
 * Récupération des pixels d'une image
 * @param img image source
 * @return Retourne les pixels de l'image
public int[] getPixels(Image img){
    if(img == null) return null;
    int [] pixels = null;
    PixelGrabber pg = null;
    int w = image.getWidth(null);
    int h = image.getHeight(null);
    pixels = new int[w * h];
    pg = new PixelGrabber(img, 0, 0, w, h, pixels, 0, w);
    try {
        pg.grabPixels();
     } catch (Exception e) {
        System.out.println("Pixel Grabbing interrupted!");
        return null;
    }
    return pixels;
}

/**
 * Recupere la couleur d'un pixel
 * @param img image source
 * @param x coordonnee en X
 * @param y coordonnee en Y
 * @return Retourne la couleur du pixel ou null
 */
public static Color getPixelColor(BufferedImage bi, int x, int y){
    if(bi == null) return null;
    int c = bi.getRGB(x,y);
    int  red = (c & 0x00FF0000) >> 16;
    int  green = (c & 0x0000FF00) >> 8;
    int  blue = c & 0x000000FF;
    return new Color(red, blue, green);
}

/**
 * Créer un filtre de convolution pour la détection des contours
 * @param source l'image source
 * @return Retourne l'image filtré
 */
public static BufferedImage contour(BufferedImage source){
    float[] filter = { 0f, -1f, 0f, -1f, 4f, -1f, 0f, -1f, 0f };
    Kernel kernel = new Kernel(3, 3, filter);
    ConvolveOp op = new ConvolveOp(kernel);
    return op.filter(source, null);
}

et vu que je suis de bonne humeur voici 2 méthodes pour passer d'un BufferedImage vers une image et inversement:
/**
 * Transforme une image en bufferedImage
 * @param image l'image à transformer
 * @return Retourn l'image convertie ou null (si l'image source été null)
 */
public static BufferedImage createBufferedImage(Image img) throws OutOfMemoryError {
    if(img == null) return null;//si l'image est null pas besoin de continuer
    if (img instanceof BufferedImage)//si l'image est deja une instance de BufferedImage on la retourne
        return (BufferedImage) img;
      
    // On s'assure que l'image soit bien chargée
    img = new ImageIcon(img).getImage();

    boolean hasAlpha = false;
    //utilisation d'un 'grabber' pour retrouver le model de couleur de l'image
    //normalement le grab du pixel en haut a gauche  est suffisant.
    PixelGrabber pg = new PixelGrabber(image, 0, 0, 1, 1, false);
    try {
        if(!pg.grabPixels()) hasAlpha = false;
        else
            // on check si le model de couleur correspond ou non a un chanel alpha
            hasAlpha =  pg.getColorModel().hasAlpha();
    } catch (Exception e) {
    }
    int type;//type de couleur
    // Si le BufferedImage precedement creer est null on en creer un avec un model par defaut
     type = BufferedImage.TYPE_INT_RGB;
    if (hasAlpha) type = BufferedImage.TYPE_INT_ARGB;
    bi = new BufferedImage(img.getWidth(null), img.getHeight(null), type);
    // On copie l'image dans le BufferedImage
    Graphics g = bi.createGraphics();
    // maintenant on la dessine
    g.drawImage(img, 0, 0, null);
    g.dispose();
    return bi;
}

/**
 * Transforme un BufferedImage en Image
 * @param bufferedImage le BufferedImage à transformer
 * @return Retourn l'image convertie ou null (si l'image source été null)
 */
public static Image createImage(BufferedImage source) throws OutOfMemoryError {
    if(source == null) return null;
    return toolkit.createImage(source.getSource());
}

voilou maintenant pour le reste bon courrage (je ne vais pas tous te faire )

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
najah01_3 Messages postés 35 Date d'inscription dimanche 24 septembre 2006 Statut Membre Dernière intervention 17 juillet 2007
4 oct. 2006 à 12:06
salut Twinus ,
justement vous n allez pas tous faire . mais ce qui est sur c que tu es tres gentil.

merci beacoup
0
najah01_3 Messages postés 35 Date d'inscription dimanche 24 septembre 2006 Statut Membre Dernière intervention 17 juillet 2007
3 févr. 2007 à 15:10
bonjour ,

lorsque je vais appliquer un filtre a une image .
j ai transformé une image en BufferedImage .


est ce je suis obliger de transformer Buff en image pour reafficher l 'image ???


Merci
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
3 févr. 2007 à 15:14
Salut,

nan tu n'es absolument obligé et je te conseil plus de travailler le plus possible qu'avec des BufferedImage.

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
Rejoignez-nous