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

AWT/Swing Java Discussion :

Stocker une image nouvellement créée


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Stocker une image nouvellement créée
    Bonsoir à vous,

    N'étant pas encore habitué à la gestion des images, je ne trouve pas une solution assez simple pour une petite opération :

    Mon JTextPane m'affiche une sortie html et je voudrais l'imprimer.

    Etapes de résolution :
    1) Je convertis la sortie en une image
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    JTextPane viewer = new JTextPane();
    viewer.setText(sortieHTML());
    Image img = viewer.createImage(210, 297);
    2) Je stocke cette image sur le disque (mais je ne vois pas comment)
    --> J'ai essayé d'imprimer le document .htm mais il m'a imprimé le code html
    3) J'imprime l'image avec la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lpr -P "nom_imprimante" "chemin_vers_l'image.jpg"
    .

    Donc il ne me manque que le processus de stockage de la photo.

    Pouvez-vous m'aiguiller ?
    Merci.

  2. #2
    Membre expérimenté Avatar de Amine_sas
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 245
    Par défaut
    Salut,
    La méthode createImage retourne un objet Image qu'on peut transformer en BufferedImage (FAQ). Ensuite tu peux enregistrer une BufferedImage sur disque en passant par la méthode ImageIO.write().

  3. #3
    Invité
    Invité(e)
    Par défaut
    Voici le code que j'ai mis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    JTextPane viewer = new JTextPane();
    viewer.setText(sortieHTML());
    Image image = viewer.createImage(210,297);
    BufferedImage bufferedImage = new BufferedImage(210, 297,BufferedImage.TYPE_INT_RGB );
    Graphics g = bufferedImage.createGraphics();
    g.drawImage(image,0,0,210,297,null);
    g.dispose();
    try {
    ImageIO.write(bufferedImage, "jpeg", new File("chemin_vers_fichier.jpeg"));
    } catch (IOException e) {
    e.printStackTrace();
    }
    En sachant qu'avec le code du lien vers la FAQ j'avais des NullPointerException mais en changeant un soupçon le code je n'ai plus d'erreur par contre ce que je trouve dans mon_fichier.jpeg est un rectangle tout noir .

    J'avoue que j'ai encore du mal à comprendre pourquoi ça ne ressemble pas à ma sortie.

    Une suggestion ?
    Merci.

    Styvodiabolo.

  4. #4
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Au lieu de passer par la méthode createImage de ton JTextPane essaie plutôt de faire indiquer comme dans la faq:http://java.developpez.com/faq/gui/?...imageComposant

  5. #5
    Invité
    Invité(e)
    Par défaut Image toujours noire
    Voici une autre version du code (comme sur le dernier lien de la FAQ):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    BufferedImage image = new BufferedImage(viewer.getWidth(), viewer.getHeight(), 
    				BufferedImage.TYPE_INT_RGB);
    		Graphics2D g = image.createGraphics();
    		viewer.paintAll(g);
    		g.dispose();
    		try {
    			ImageIO.write(image, "jpeg", new File("chemin_vers_fichier.jpeg"));
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    Une précision :
    Avec ce code, j'ai une Exception :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     java.lang.IllegalArgumentException: Width (0) and height (0) cannot be <= 0
    	at java.awt.image.DirectColorModel.createCompatibleWritableRaster(DirectColorModel.java:999)
    Donc je remplace les valeurs viewer.getWidth() et viewer.getHeigth() par 210 et 297 et là pas d'exceptions mais image noire

    Voyez-vous pourquoi ?
    Merci.
    Dernière modification par Invité ; 20/03/2008 à 13h40.

  6. #6
    Membre expérimenté Avatar de Amine_sas
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 245
    Par défaut
    Salut,
    La méthode a correctement fonctionné avec moi.
    Essaye de passer les vrais width et height du composant au constructeur de BufferedImage comme indiqué dans la faq.

Discussions similaires

  1. Comment stocker une image dans une base de données sqlce ?
    Par ozeon dans le forum Développement
    Réponses: 3
    Dernier message: 11/07/2016, 20h13
  2. [MySQL] Stocker une image en base de données
    Par pod1978 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 11/03/2006, 22h51
  3. [Image] Classe pour stocker une image JPEG ?
    Par elitost dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 19/01/2006, 13h34
  4. [VB.NET]Compute une colonne nouvellement créée
    Par Golzinne dans le forum Windows Forms
    Réponses: 2
    Dernier message: 12/12/2005, 10h00
  5. Réponses: 9
    Dernier message: 17/10/2005, 10h44

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