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

 Java Discussion :

Conversion de Graphics2d a ImageBuffered


Sujet :

Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 16
    Par défaut Conversion de Graphics2d a ImageBuffered
    Bonjour,
    Je vous explique mon problème. Je dois réaliser une application permettant de faire des modifications sur une image, tel qu'une rotation, changement de couleur, ect. Je dois, après avoir effectué les modifications, pouvoir enregistrer l'image.

    Ce que je voulais faire donc était de loader mon image à partir du fichier dans un imageBuffered, et ensuite, la dessiner grâce à un graphics2d. Jusque là tout va bien, j'arrive à faire ma rotation sur l'image et à l'afficher. Mais ensuite je dois l'enregistrer. On ne peut pas (Enfin je crois) enregistrer un Graphics2d, et donc, je dois convertir mon graphics2d en imageBuffered.

    Y a t-il un moyen simple de faire ce que je veux?
    Merci d'avance de votre aide.

    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
    public void paintComponent(Graphics g)
    	{	
    		super.paintComponent(g);
    		try 
    		{
    			File fichier = new File(this.imageUrl);
    			image = ImageIO.read(fichier);
    		} 
    		catch (IOException e) 
    		{
    			e.printStackTrace();
    		}
    		Graphics2D g2d = (Graphics2D)g;
    		AffineTransform tfm = new AffineTransform();
    		tfm.rotate(Math.toRadians(180),image.getWidth()/2,image.getHeight()/2);
    		g2d.setTransform(tfm);
    		g2d.drawImage(image, 0, 0, null);
    		
    		
    
    		File output = new File("c:\\test.gif");
    		try {
    //J'ai mis ici image, mais évidemment ce n'est pas ce qu'il faut. Il me faudrait le buffered image résultant de la conversion du graphics2d
    			ImageIO.write(image, "gif", output);
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    
    	}

  2. #2
    Membre éclairé Avatar de clubist
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2008
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2008
    Messages : 217
    Par défaut
    Bonjour,
    Donc Pour sauver une image, vous devez la convertir en BufferedImage, puis la sauver avec ImageIO.
    Et donc vous veuillez remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    try {
    //J'ai mis ici image, mais évidemment ce n'est pas ce qu'il faut. Il me faudrait le buffered image résultant de la conversion du graphics2d
    			ImageIO.write(image, "gif", output);
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    par ça
    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
     
    //créer BufferedImage 
         BufferedImage bi = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_ARGB); 
    //Créer Graphics2D à partir de ce  BufferedImage    
        Graphics2D g2dsauve = bi.createGraphics(); 
    // copier l'image dans ce  Graphics2D    
        g2dsauve.drawImage(image, 0, 0, image.getWidth(), image.getHeight(), null);
     
     
        try { 
    // sauvegarder le contenu de ce  BufferedImage dans le fichier de sortie     
       ImageIO.write(bi, "gif", output); 
          } catch (Exception e) { 
          e.printStackTrace(); 
        }//end try 
      }//end save

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 16
    Par défaut
    Ton code enregistre l'image, certes, mais sans les modifications qui lui ont été appliquées. J'ai tout de même réussit à le faire marcher en refaisant la rotation et en adaptant le code pour éviter les répétitions.

    Merci de ton aide

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 904
    Billets dans le blog
    54
    Par défaut
    Apparement tu as surcharge un JPanel ou un JComponent pour faire la transformation puisque tu utilises une methode paintComponent() ; il te faut donc appeler cette methode sur le Graphics de la nouvelle image, celle cree par le code donne par clubist.


    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
    //créer BufferedImage 
         BufferedImage bi = new BufferedImage(largeur, hauteur, BufferedImage.TYPE_INT_ARGB); 
    //Créer Graphics2D à partir de ce  BufferedImage    
        Graphics2D g2dsauve = bi.createGraphics(); 
     
       // Utiliser la methode de rendu mais sur le graphics de l'image plutot que celui de l'ecran.
       monPanel.paintComponent(g2dsauve);
     
        try { 
    // sauvegarder le contenu de ce  BufferedImage dans le fichier de sortie     
       ImageIO.write(bi, "gif", output); 
          } catch (Exception e) { 
          e.printStackTrace(); 
        }//end try 
      }//end save
    Attention cependant comme tu fais une rotation, l'image destination n'a pas les memes dimensions que l'image source, il te faut resortir les formules de trigonometrie pour connaitre la bonne largeur et hauteur en fonction des dimensions de l'image source et de l'angle utilise.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 16
    Par défaut
    En effet, je viens de me rendre compte que les proportions de l'image était différente après la rotation, et même qu'elle était déplacé. Je ne suis pas certain de comprendre en quoi les fonctions trigonométriques pourraient résoudre mon problème.

  6. #6
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 904
    Billets dans le blog
    54
    Par défaut
    w2 = abs(w1 * cos(theta))
    h2 = abs(h1 * sin(theta))

    ou un truc du genre... cours de trigo niveau college~lycee.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 16
    Par défaut
    Je vois. Je parais bête car bon, disonc que c'est un niveau de mathématique assez faible, mais j'ai vu sa depuis tellement longtemps Jamais été bon en géométrie

    Fonctionnel donc, Merci.
    Reste plus qu'à trouver une relation pour faire une translation permettant de remettre mon image a 0,0. Je me débrouillerai

Discussions similaires

  1. Conversion Assembleur Motorola 68xxx en Intel 80xxx
    Par markham dans le forum Autres architectures
    Réponses: 3
    Dernier message: 22/11/2002, 20h09
  2. [MSXML] Comment empécher la conversion des entités ?
    Par nima dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 08/11/2002, 14h14
  3. Algorithme de conversion de RTF vers HTML
    Par youtch dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 10/09/2002, 12h35
  4. [Conversions] Millisecondes...
    Par agh dans le forum Langage
    Réponses: 2
    Dernier message: 06/08/2002, 11h25
  5. Réponses: 2
    Dernier message: 05/06/2002, 12h29

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