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

2D Java Discussion :

Créer une BufferedImage d'un composant invisible


Sujet :

2D Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 29
    Par défaut Créer une BufferedImage d'un composant invisible
    Bonjour,

    J'aimerais savoir comment créer une BufferedImage de tout le contenu d'un JScrollPane et du JPanel qui le contient.
    J'ai déjà plus ou moins réussi grâce à la deuxième réponse , le problème c'est que, une fois l'image créée, cela fait disparaître complètement le JPanel de ma JFrame et je ne comprend pas pourquoi.

    Merci de votre aide,
    Shadorc

  2. #2
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    BufferedImage bi = ...
    jScrollPane.paintComponent(bi.getGraphics());
    jScrollPane.repaint();
    ?

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 29
    Par défaut
    En fait mon code est le suivant, pane étant le JPanel contenant mon JScrollPane.

    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
    private File screen;
     
    public Upload(JPanel pane) {
     
    	try {
    		 screen = new File("./screen.jpg");
     
                     BufferedImage bi = paintComponent(pane);
    		 ImageIO.write(bi, "jpg", screen);
     
    	} catch (IOException e) {
    		JOptionPane.showMessageDialog(null, "Erreur lors de la capture d'écran, " + e.getMessage(), "Erreur", JOptionPane.ERROR_MESSAGE);
    	}
    }
     
    public static BufferedImage paintComponent(Component c) {
     
    	c.setSize(c.getPreferredSize());
    	layoutComponent(c);
     
    	BufferedImage img = new BufferedImage(c.getWidth(), c.getHeight(), BufferedImage.TYPE_INT_RGB);
     
    	CellRendererPane crp = new CellRendererPane();
    	crp.add(c);
    	crp.paintComponent(img.createGraphics(), c, crp, c.getBounds());    
    	return img;
    }
     
    public static void layoutComponent(Component c) {
    	synchronized (c.getTreeLock()) {
    		c.doLayout();
    		if (c instanceof Container)
    			for (Component child : ((Container) c).getComponents())
    				layoutComponent(child);
    	}
    }
    Ce code marche parfaitement, le problème c'est que une fois que je prend le screenshot, ce JPanel disparaît de ma JFrame, comme si le CellRendererPane le remplaçait. Et c'est ça mon problème. J'ai essayé de le corriger avec repaint(), revalidate(), en créant une copie du JPanel avant de prendre le screenshot, rien n'a été concluant.

  4. #4
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    Bah oui, quand tu fais add, ça enlève le composant de là où il était pour le mettre dans le nouvelle emplacement....

    Dans ton code, je ne comprend ni le setSize, ni le add, ni les doLayout, ni le CellRendererPane...

    Tout ce que tu dois faire, c'est dessiner le composant dans une image: pas le déplacer, pas le redimenssionner, etc.

    Taille un peu dans le vif, et reviens en cas de souci.

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 29
    Par défaut
    Ah oui j'ai compris merci. Mais tout cela permet de redessiner ce que je veux avoir dans le BufferedImage sur un nouveau JPanel (le CellRenderPane) pour qu'il soit à sa taille par défaut, celle où l'on voit tous son contenu.

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 29
    Par défaut
    Je n'ai toujours pas trouvé comment créer une BufferedImage d'un JScrollPane qui n'est pas visible en entier... Personne ne sait ? :/
    La méthode de Pill_S marche mais cela prend que la zone visible et non pas le JScrollPane en entier.

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 10/04/2008, 16h38
  2. Réponses: 4
    Dernier message: 09/10/2007, 09h00
  3. Réponses: 2
    Dernier message: 28/02/2007, 20h57
  4. [Débutant] Créer une BufferedImage
    Par Mo_Poly dans le forum Multimédia
    Réponses: 3
    Dernier message: 28/02/2007, 02h16
  5. [Débutant creation de composant] Créer une LED numérique
    Par C_Marteau dans le forum C++Builder
    Réponses: 8
    Dernier message: 14/06/2005, 21h23

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