IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Interfaces Graphiques en Java Discussion :

afficher une suite d'image sous forme d'un tableau d'image


Sujet :

Interfaces Graphiques en Java

  1. #1
    Candidat au Club Avatar de mak04
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2016
    Messages : 9
    Points : 4
    Points
    4
    Par défaut afficher une suite d'image sous forme d'un tableau d'image
    Bonjour les amis !
    bon ! je vous explique mon problème. je travail sur une application en entré récupère un fichier pdf d'une ou de plusieurs pages, le converti en en un ou plusieurs fichiers image (.png) et affiche les fichiers converti à l'écran.
    je butte actuellement sur l'affichage des fichiers car mon idée est qu'à l'étape de conversion, je récupère chaque page converti dans un tableau d'image et par la suite, j'affiche le tableau. mais le programme me signale une erreur à la ligne de récupération.
    voici mon code de conversion:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    int nbPages = pdf.getNumPages(); 
                for(int i = 0; i < nbPages; i++){
                    try {
                        PDFPage page = pdf.getPage(i);
                        Rectangle rect = new Rectangle(0, 0, (int)page.getBBox().getWidth(), 
                                (int)page.getBBox().getHeight());
     
                        Image img = page.getImage(rect.width, rect.height, rect, null, true, true);
     
                             // sauvegarde de l'image dans un fichier
                        BufferedImage bImg = toBufferedImage(img);
     
                        File imageFile = new File(destination+File.separator + "page_" + i + ".png");
     
                        ImageIO.write(bImg, "png", imageFile);
                        tabImg[i] = ImageIO.read(imageFile);
                    } catch (IOException ex) {
                        Logger.getLogger(Convertisseur.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
    voici la partie du code qui me permet d'afficher le tableau:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
            new Convertisseur();
            Image[] tab = Convertisseur.tabImg;
     
            ImgModel imgModel = new ImgModel(tab, "Document");
            JTable tabFile = new JTable(imgModel);
            //            calcule();
     
            panPrincipal.remove(panCentre);
            panPrincipal.add(new JScrollPane(tabFile), BorderLayout.CENTER);
            panPrincipal.updateUI();
    si quelqu'un peut me venir en aide, se serait un plaisir

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Citation Envoyé par mak04 Voir le message
    mais le programme me signale une erreur à la ligne de récupération.
    Et c'est quoi l'erreur ?

    Par ailleurs,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    panPrincipal.remove(panCentre);
            panPrincipal.add(new JScrollPane(tabFile), BorderLayout.CENTER);
            panPrincipal.updateUI();
    Tu retires un composant référencé par panCentre puis tu ajoutes un scrollpane sur tabFile. La deuxième fois, panCentre sera toujours le même composant, donc le retirer ne fera rien (il l'est déjà) et le JScrollPane ajouté précédemment ne sera pas retiré, un nouveaux sera ajouté. Les JScrollPane/JTable vont se cumuler dans le panPrincipal. Le layout de type BorderLayout est fait pour ne gérer qu'un seul composant au centre, et ça risque donc de dysfonctionner graphiquement (seule le dernier scrollpane ajouté sera layouté), sans parler de l'occupation mémoire inutile.

    Plutôt que updateUI() (c'est pour les composants d'UI, comme un JButton par exemple), faire plutôt revalidate().

  3. #3
    Candidat au Club Avatar de mak04
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2016
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    bonjour Joel et merci pour votre réaction

    déjà la première erreur qu'on me signal porte sur la ligne de code

    tabImg[i] = ImageIO.read(imageFile);

    et voici le message qui s'affiche : java.lang.NullPointerException

    pour ce qui est de l'affichage, le code d'affichage n'est pas dans une boucle en fait

    je vous représente le code en question


    panPrincipal.remove(panCentre); // retirer le paneau principal
    panPrincipal.add(new JScrollPane(tabFile), BorderLayout.CENTER); // ajout du paneau contenant le tableau à afficher
    panPrincipal.revalidate(); // actialusation de la JFrame

    tout ceci n'est pas dans une boucle je le reprécise

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par mak04 Voir le message
    déjà la première erreur qu'on me signal porte sur la ligne de code

    tabImg[i] = ImageIO.read(imageFile);

    et voici le message qui s'affiche : java.lang.NullPointerException
    C'est probalement que tabImg est null.

    D'ailleurs, au passage, tu n'es même pas obligé de relire l'image, puisque tu l'as à portée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    BufferedImage bImg = toBufferedImage(img);
     
    File imageFile = new File(destination+File.separator + "page_" + i + ".png");
     
    tabImg[i] = bImg; // ou tabImg[i]=img

  5. #5
    Candidat au Club Avatar de mak04
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2016
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    je sais pas, mais le tabImg ne devrait pas être null vu que je lui affecte l'image nouvellement créée après la création et la création se fait sans problème.
    de plus, pouvez-vous m'indiquer comment récupérer se tabImg dans mon panel d'affichage ? je vous présente d'ailleur les codes complet des deux classes (convertisseur et impression qui s'occupe de l'afficharge).


    // code Convertisseur.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
     
    public class Convertisseur{
     
        Convertisseur() {        
     
            System.out.println("la source est "+Impression.source);
            try {
                File pdfFile = new File(Impression.source);
                RandomAccessFile raf = new RandomAccessFile(pdfFile, "rw");
                FileChannel channel = raf.getChannel();
                String destination = "D://GEC-I/Impression/";
                ByteBuffer buf = null;
                try {
                    buf = channel.map(FileChannel.MapMode.READ_ONLY, 0, channel.size());
                } catch (IOException ex) {
                    Logger.getLogger(Convertisseur.class.getName()).log(Level.SEVERE, null, ex);
                }
                PDFFile pdf = null;
                try {
                    pdf = new PDFFile(buf);
                } catch (IOException ex) {
                    Logger.getLogger(Convertisseur.class.getName()).log(Level.SEVERE, null, ex);
                }
                int nbPages = pdf.getNumPages(); 
                for(int i = 0; i < nbPages; i++){
                    try {
                        PDFPage page = pdf.getPage(i);
                        Rectangle rect = new Rectangle(0, 0, (int)page.getBBox().getWidth(), 
                                (int)page.getBBox().getHeight());
     
                        Image img = page.getImage(rect.width, rect.height, rect, null, true, true);
     
                             // sauvegarde de l'image dans un fichier
                        BufferedImage bImg = toBufferedImage(img);
     
                        File imageFile = new File(destination+File.separator + "page_" + i + ".png");
     
                        ImageIO.write(bImg, "png", imageFile);
                        tabImg[i] = ImageIO.read(imageFile);
                    } catch (Exception ex) {
                        System.err.println(""+ex);
                    }
                }
                lien_image=destination;
               // Frame.chargement.setVisible(false);
     
            } catch (FileNotFoundException ex) {
                Logger.getLogger(Convertisseur.class.getName()).log(Level.SEVERE, null, ex);
            }
     
     
        }
     
        public static String lien_image;
        public static Image[] tabImg = null;
     
        private BufferedImage toBufferedImage(Image img){
            if(img instanceof BufferedImage){
                return (BufferedImage) img;
            }
     
            img = new ImageIcon(img).getImage();
     
            BufferedImage bImg = null;
            GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
            try {
                int transparency = Transparency.OPAQUE;
     
                GraphicsDevice gs = ge.getDefaultScreenDevice();
                GraphicsConfiguration gc = gs.getDefaultConfiguration();
                bImg = gc.createCompatibleImage(img.getWidth(null), img.getHeight(null), transparency);
            } catch (HeadlessException e) {
                System.out.println("The system does not have a screen");
            }
     
            if (bImg == null) {
                int type = BufferedImage.TYPE_INT_RGB;
                bImg = new BufferedImage(img.getWidth(null), img.getHeight(null), type);
            }
     
            Graphics2D g = bImg.createGraphics();
     
            g.drawImage(img, 0, 0, null);
            g.dispose();
     
            return bImg;
        }
    }
    // code Impression.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
        private void btn_traitementActionPerformed(java.awt.event.ActionEvent evt) {                                               
     
            new Convertisseur();
            Image[] tab = Convertisseur.tabImg;
     
            ImgModel imgModel = new ImgModel(tab, "Document");
            JTable table = new JTable(imgModel);
            //            calcule();
     
            panPrincipal.remove(panCentre);
            panPrincipal.repaint();
            panPrincipal.add(table);
            panPrincipal.revalidate();
            panPrincipal.repaint();
     
            JLabel ic = new JLabel(new ImageIcon(Convertisseur.lien_image));
            JOptionPane.showMessageDialog(null, ic,"Profil",JOptionPane.INFORMATION_MESSAGE); 
            JOptionPane.showMessageDialog(null, "Le document a "+Convertisseur.tabImg.length+" pages");
        }
    voilà les deux codes

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par mak04 Voir le message
    je sais pas, mais le tabImg ne devrait pas être null vu que je lui affecte l'image nouvellement créée après la création et la création se fait sans problème.
    Non, je ne parle pas de tabImg[i], la cellule de tableau d'index i, mais de tabImg, le tableau, qui est déclarée ici public static Image[] tabImg = null; : donc elle est bien null, et comme il n'y a nulle part de tabImg = new Image[nbPages]; elle le reste.


    Citation Envoyé par mak04 Voir le message
    de plus, pouvez-vous m'indiquer comment récupérer ce tabImg dans mon panel d'affichage ?
    Bien que cela ne soit pas une manière propre de faire, avec ton code, il te suffit d'accèder à la variable tabImg puisqu'elle est public static. Dans n'importe quelle méthode de n'importe quelle classe tu peux écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    new Convertisseur();
    Image[] images  = Convertisseur.tabImg;
    Plutôt que de faire des accès static interclasses à des variables (valable pour Convertisseur.tabImg et Impression.source aussi), ce serait plut propre de faire une méthode, avec argument et type de retour, static par exemple, du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public static Image[] getImages(String source) {
         // ici tu mets le code qui est actuellement dans le constructeur de Convertisseur, en ajoutant bien sûr la déclaration et l'initialisation du tableau tabImg et tu fais un return tabImg à la fin
    }

  7. #7
    Candidat au Club Avatar de mak04
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2016
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    merci pour votre aide Joel. justement mon erreur venait du fait que je n'initialisais pas mon tabImg ( tabImg = new Image[nbPages]). je l'ai fait et je n'ai plus d'erreur.
    sauf que mes image ne s'affichent toujours pas. avec le code d'importation:

    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            panPrincipal.remove(panCentre);
            panPrincipal.repaint();
            panPrincipal.add(new JScrollPane(table),BorderLayout.CENTER);
            panPrincipal.revalidate();
            panPrincipal.repaint();

    le panCentre est bien retiré, mais table qui est le panneau par lequel j'affiche les images ne s'affiche pas. j'ai juste ce panneau qui s'affiche. je sais pas si vous pouvez m'aider
    je précise que mes images ne se trouvent pas dans mon dossier projet. mon projet est sauvegardé dans : "C://Users/KAFRA/Documents/NetBeansProjects/Impression d'image/" et mes images sont stocké dans : " D://GEC-I/Impression/
    Images attachées Images attachées  

  8. #8
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Ce que tu me montres, c'est l'affichage produit par ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    JLabel ic = new JLabel(new ImageIcon(Convertisseur.lien_image));
            JOptionPane.showMessageDialog(null, ic,"Profil",JOptionPane.INFORMATION_MESSAGE);
    Ce qu'on voit c'est un dialogue modal (qui attends qu'on le ferme pour que le code continue de s'exécuter). Il n'affiche aucun message parce que le message que tu affiches, c'est une icône produite avec comme chemin Convertisseur.lien_image, un chemin de dossier, donc pas une image.

    Quel est le code de la JFrame dans laquelle tu as mis panPrincipal ?

Discussions similaires

  1. Afficher une liste de texte sous forme de colonnes
    Par stevensavior dans le forum VB.NET
    Réponses: 3
    Dernier message: 25/01/2015, 23h23
  2. Réponses: 3
    Dernier message: 01/03/2014, 20h12
  3. Afficher une suite d'image dans un JScrollPane
    Par bilibou dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 31/05/2009, 10h24
  4. Réponses: 2
    Dernier message: 07/02/2006, 20h44
  5. comment créer une image sous forme d'eclipse(ronde)
    Par unix27 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 15/05/2005, 23h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo