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

Composants Java Discussion :

[JEditorPane] Transformation en BufferedImage


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 110
    Par défaut [JEditorPane] Transformation en BufferedImage
    Salut,
    Je voudrais transformer mon JEditorPane (qui contient un tableau HTML) en BufferedImage.
    J'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Image img = editor.createImage(editor.getWidth(), editor.getHeight()); 
    BufferedImage buff = new BufferedImage(editor.getWidt(),                     editor.getHeight(), BufferedImage.TYPE_INT_RGB);
    Graphics2D g2d = buff.createGraphics(); 
    g2d.drawImage(img, null, null);
    Le problème c'est que mon editor à une taille de 0 sur 0!
    En bidouillant j'ai réussi à avoir un buffer tout blanc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    JFrame frame1 = new JFrame();
    JDialog dialog = new JDialog(frame1, "test", true);
    dialog.setBackground(Color.white);
    dialog.setSize(700,700);
    dialog.getContentPane().add(editor);
    dialog.setVisible(true);
    Est-ce que quelqu'un pourrait m'aider???
    Merci d'avance!

  2. #2
    Membre éclairé
    Inscrit en
    Avril 2004
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 68
    Par défaut
    Pourquoi utilises-tu la méthode Component.createImage(int, int) ?

    D'habitude, pour faire ce genre de truc, il faut que le composant soit affiché ; puis tu crées un BufferedImage ou assimilé, qui te donnes un Graphics ou assimilé, que tu utilises pour envoyer la méthode paint de ton composant. A partir de là, l'image de ton composant se trouve dans ton BufferedImage et de tu en fais ce que tu veux.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 110
    Par défaut
    J'utilise la méthode Component.createImage() car je ne connait que cette façon de faire!
    Mais si tu connais un autre moyen sans passer par l'affichage de l'objet je suis preneuse.

  4. #4
    Membre éclairé
    Inscrit en
    Avril 2004
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 68
    Par défaut
    Mais la méthode createImage crée une image vide !

    A mon avis, dans ton code, au lieu de faire g2d.drawImage(img, null, null), il faut faire editor.paint(g2d).

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 110
    Par défaut
    J'ai remplacé la ligne. J'obtient effectivement un bufferedImage. Seul soucis il est noir!

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 38
    Par défaut
    salut, mais je ne me souviens plus si c'est necessaire, mais est ec que t'as penser a rajouter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public void update (Graphics g) {
        	paint(g);
        }
    ?

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 110
    Par défaut
    J'ai du mal à voir ou je rajoute cette méthode?

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 38
    Par défaut
    J'ai du mal à voir ou je rajoute cette méthode?
    dans ta classe
    juste apres la methode paint () par exemple

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 110
    Par défaut
    Ma classe ne contient pas la méthode paint!

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 38
    Par défaut
    oui c'est normal, tu n'es pas obligé de la réécrire...
    cela dit j'ai peut etre mal compris ton probleme...
    Cependant,pour utiliser une BufferedImage je crois qu'il faut deja dessiner qqch qq part

    Je dirait qu'il faut que dans la classe de ton editor il y ait une methode paint qui dessine dans un buffer


    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
     
    Image offscreen;
    BufferedImage buffer;
    Dimension offscreensize;
    Graphics offgraphics;
     
    public void update (Graphics g) {
        	paint(g);
    }
     
    public void paint(Graphics g) {
            Dimension d = getSize();
            if ((offscreen == null) || (d.width != offscreensize.width) || (d.height != offscreensize.height)) {
                offscreen = createImage(d.width, d.height);
                offscreensize = d;
     
                buffer = new java.awt.image.BufferedImage (d.width, d.height, java.awt.image.BufferedImage.TYPE_INT_RGB);
                offgraphics = buffer.createGraphics();
            }
     
            //La tu dessine ce que tu veux dans un buffer
            offgraphics.fillRect(0, 0, d.width, d.height);
     
            offscreen = buffer;
            g.drawImage(offscreen, 0, 0, null);
        }

    qqch de ce genre ... je ne me rappelle pas tres bien, mais je me souviens avoir comme toi galeré ... bon courage!

    Ce que je comprend pas c'est ou est placé le code que tu donnes (le premier) ...

    et sinon il ne me semble pas que le background (et sa couleur blanche) ait un rapport avec la BufferedImage ...

  11. #11
    Membre éclairé
    Inscrit en
    Avril 2004
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 68
    Par défaut
    Citation Envoyé par gwendo
    J'ai remplacé la ligne. J'obtient effectivement un bufferedImage. Seul soucis il est noir!
    Mais a-t-il au moins la bonne taille, c'est à dire celle du JEditorPane ? Essaie de tracer la taille de ton JEditorPane et celle de ton image, les deux doivent être exactement les mêmes (et différentes de 0 ! ). Pour le noir, on verra après.

  12. #12
    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
    hello,

    moi j'ai une solution très très simple mais pas très très belle (bon encore que là-dessus on puisse discuter)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
    try {
      BufferedImage img = new Robot().createScreenCapture(new Rectangle(0, 0, screen.width, screen.height));            
    }
    catch(Exception e){
      e.printStackTrace();
    }
    et voili 7 lignes de code

    bon pour la taille j'ai choisi de prendre tout l'écran, à toi d'adapter

    il faut juste pas que ton editor soit dans un scrollpane (sinon tu verras pas toute l'image)

    @ plus

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

Discussions similaires

  1. [PERL] transformation de fichier
    Par bob20000 dans le forum Langage
    Réponses: 6
    Dernier message: 27/07/2006, 11h13
  2. transformer un fichire Xml en pdf
    Par SuperFoustan dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 21/02/2003, 11h45
  3. transformer un jour en JJ/MM/AA
    Par gemini_010 dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 08/11/2002, 22h55
  4. Transformer un caractère en type énuméré
    Par HT dans le forum Langage
    Réponses: 3
    Dernier message: 22/10/2002, 20h46
  5. FFT(Fast Fourier Transform)
    Par IngBen dans le forum Traitement du signal
    Réponses: 6
    Dernier message: 23/05/2002, 16h35

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