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 :

Créer une image en java


Sujet :

Java

  1. #1
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 185
    Par défaut Créer une image en java
    Bonjour,

    Je veux être capable de créer et visualiser une image en java, par exemple je veux de i allant de 0 à 99 et j allant de 0 à 377 on met rouge=255 , vert=223 et bleu = 127

    Et de i allant de 100 à 399 et j allant de 0 à 377 on met rouge=127 , vert=215 et bleu = 247.

    un coup de main sera la bienvenue merci .

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    et tu bute sur quoi concrètement?

  3. #3
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 185
    Par défaut
    Créer une image de test !

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482

  5. #5
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 185
    Par défaut
    Bonjour,
    j'ai essayé des dessiner les valeurs que je veux et les afficher dans une Jpanel y'a t-il un moyen de convertir cette panel en image ?
    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
     
     
     
       public class TEST_TS extends JPanel
       {
     
       BufferedImage monImage;
       BufferedImage monImage2;
     
          public static void TEST_TS()
          {
     
             JFrame fenetre1 = new JFrame();
             fenetre1.setSize(273, 295);
             fenetre1.setTitle("lol");
             JPanel panneau = new TEST_TS();
             panneau.setBackground(Color.RED);
             fenetre1.add(panneau);
             fenetre1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
             fenetre1.setVisible(true);
          }
     
          @Override
          public void paintComponent(Graphics g2){
     
             super.paintComponent(g2);
             int larg = getWidth();
             int haut = getHeight();
     
     
             int dim = 8; //dimension d'une case de la grille
     
     
             for(int j = 0; j <320; j ++)
             { 
                for(int i = 0; i <320; i ++)
     
                {
                	if (i<40){
                   g2.setColor(new Color(0, 0, 0));}
                	else if (i<80){
                		g2.setColor(new Color(255, 0, 0));}
                	else if (i<120){
                    		g2.setColor(new Color(0, 255, 0));}
                	else if (i<160){
                		g2.setColor(new Color(255, 255, 0));}
                	else if (i<200){
                		g2.setColor(new Color(0, 0, 255));}
                	else if (i<240){
                		g2.setColor(new Color(255, 0, 255));}
                	else if (i<280){
                		g2.setColor(new Color(0, 255, 255));}
                	else if (i<320){
                		g2.setColor(new Color(255, 255, 255));}
     
     
                	   g2.fillRect(i*2, j*2, 2,2); 
                   }
     
     
                }
             } 
     
     
     
     
     
     
          public static void main (String [] arg)
          {
             TEST_TS();
          }}

  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
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par YOUHANA Voir le message
    y'a t-il un moyen de convertir cette panel en image ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    BufferedImage image = new BufferedImage(largeur, hauteur, BufferedImage.TYPE_INT_RGB);
    Graphics2D g = image.createGraphics();
    panel.paint(g);
    g.dispose();
    La largeur et la hauteur peuvent être prises du panel directement (panel.getWidth() et panel.getHeight()).


    Et si tu veux en faire un fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ImageIO.write(image, formatName, new File("c:/blahblah...")
    avec formatName qui vaut "PNG" pour du PNG, "JPEG" pour du Jpeg, etc.


    Accessoirement, l'exemple que je t'avais donné pour l'autre fil dessinait dans une image puis dessinait cette image dans le panel (donc faisait exactement ce que tu demandes). Pourquoi n'avoir pas conservé le code de cet exemple si c'est pour au final redessiner le contenu du panel dans une image ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #7
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 185
    Par défaut
    Bonjour,
    J'arrive bien à extraire le contenu mais il ajoute un bordure noir que je comprends pas je crois que c'est un probleme de taille ?
    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
     
     
     
       public class TEST_TS extends JPanel
       {
     
     
     
          public static void TEST_TS()
          {
     
             JFrame fenetre1 = new JFrame();
             fenetre1.setSize(343, 365);
             fenetre1.setTitle("lol");
             JPanel panneau = new TEST_TS();
             panneau.setBackground(Color.RED);
             fenetre1.add(panneau);
             fenetre1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
             fenetre1.setVisible(true);
     
     
          BufferedImage image = new BufferedImage(350, 350, BufferedImage.TYPE_INT_RGB);
          Graphics2D g = image.createGraphics();
          panneau.paint(g);
          g.dispose();
     
          try {
    				ImageIO.write(image, "PNG", new File("d:/imageee.png"));
    			} catch (IOException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
     
          } 
     
          @Override
          public void paintComponent(Graphics g2){
     
             super.paintComponent(g2);
             int larg = getWidth();
             int haut = getHeight();
     
             for(int j = 0; j <320; j ++)
             { 
                for(int i = 0; i <320; i ++)
     
                {
                	if (i<40){
                   g2.setColor(new Color(0, 0, 0));}
                	else if (i<80){
                		g2.setColor(new Color(255, 0, 0));}
                	else if (i<120){
                    		g2.setColor(new Color(0, 255, 0));}
                	else if (i<160){
                		g2.setColor(new Color(255, 255, 0));}
                	else if (i<200){
                		g2.setColor(new Color(0, 0, 255));}
                	else if (i<240){
                		g2.setColor(new Color(255, 0, 255));}
                	else if (i<280){
                		g2.setColor(new Color(0, 255, 255));}
                	else if (i<320){
                		g2.setColor(new Color(255, 255, 255));}
     
     
                	   g2.fillRect(i, j, 8,8); 
     
                }}
     
     
             } 
     
          public static void main (String [] arg)
          {
             TEST_TS();
          }}

  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
    Billets dans le blog
    2
    Par défaut
    C'est parce que tu imposes une taille en dur (350x350), au lieu de prendre la taille du panel, qui doit être plus petite. Une image non transparente a un fond noir par défaut. Si tu veux faire une image plus grande que le panel, mais avec un fond pas noir, rempli le fond avec la couleur de ton choix.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  9. #9
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 185
    Par défaut
    Oui mais quand je fais
    BufferedImage image = new BufferedImage(larg, haut, BufferedImage.TYPE_INT_RGB);
    j'ai l'erreur que larg et haut sont non declaré

  10. #10
    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
    Billets dans le blog
    2
    Par défaut
    Bah, forcément, si tu utilises des variables non déclarées, c'est normal. Ce n'est pas le problème d'utiliser ou non des variables. Tu dois donner une taille à ton image : une largeur et une hauteur. Je t'ai dit que si c'était celles du panel, tu pouvais les obtenir par panel.getWidth() et panel.getHeight(). Maintenant, c'est peut-être une autre taille, moi j'en sais rien, c'est toi qui le sait, donc c'est à toi de voir quelle taille tu donnes à ton image. Et si ton image est plus grande que ton panel, tu fais ce que je t'ai dit pour éviter les bandes noires, ou alors tu as des bandes noires.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  11. #11
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 185
    Par défaut
    SUper merci bcp je passe en resolu.
    Du coup j'ai une interface ou je recupere une image je la traite puis je la réenregistre du coup comme toujours il m'enregistre comme image tout le panel par contre moi je veux que le contenu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	} else if (cliqueMenu.getSource().equals(enregistrerMenu)) {
    				JFileChooser fileEnregistrerImage = new JFileChooser();
    				if (fileEnregistrerImage.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) {
    				File fichierEnregistrement = new File(fileEnregistrerImage.getSelectedFile().getAbsolutePath()+ ".JPG");
    				panneau.enregistrerImage(fichierEnregistrement);
    				slider.setEnabled(false);
    			}

  12. #12
    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
    Billets dans le blog
    2
    Par défaut
    Le contenu ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  13. #13
    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
    Billets dans le blog
    2
    Par défaut
    Si tu importes une image pour la dessiner et ensuite la resauvegarder dans une fichier, autant faire juste une copie de fichier (avec Files.copy()) !

    Si tu as dessiné l'image dans la méthode paintComponent, ça va être un peu plus compliqué. Le plus simple serait de faire ce que je t'ai 2 fois de faire : dessiner dans une image, et dessiner l'image dans la méthode paintComponent, et sauvegarder l'image par ailleurs directement. Tu peux également faire une méthode qui dessine et l'appeler des 2 endroits (paintComponent d'une part et la sauvegarde de l'image de l'autre).

    On peut sauvegarder une partie de panel dans une image, en utilisant une translation.

    1. La version qui dessine une image, la dessine dans le panel et la sauvegarde par ailleur :
      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
      public class DemoCreerFichierImage1 extends JPanel {
       
      	public static final int OFFSET = 10;
      	public static final int SIZE = 20;
      	public static final int NB = 8;
       
      	private final BufferedImage image;
       
      	public DemoCreerFichierImage1(BufferedImage image) {
      		this.image=image;
      		setPreferredSize(new Dimension(OFFSET*2+image.getWidth(),OFFSET*2+image.getHeight()));
      	}
       
      	@Override
      	protected void paintComponent(Graphics g) {
      		super.paintComponent(g);
      		g.drawImage(image, OFFSET, OFFSET, this);
      	}
       
      	public static void main(String[] args) {
       
      		JFrame frame = new JFrame("Démo");
      		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       
      		// on dessine d'abord une image
      		BufferedImage image = new BufferedImage(SIZE*NB,SIZE*NB, BufferedImage.TYPE_INT_RGB);
      		Graphics2D g = image.createGraphics();
      		dessiner(g, 0, SIZE, NB);
      		g.dispose();
       
      		JPanel panel = new DemoCreerFichierImage1(image);
      		frame.add(panel);
       
      		frame.pack();
      		frame.setLocationRelativeTo(null);
      		frame.setVisible(true);
       
      		// sauvegarde
      		JFileChooser fc = new JFileChooser();
      		fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
      		fc.setFileFilter(new FileFilter() {
       
      			@Override
      			public String getDescription() {
      				return "Fichier PNG";
      			}
       
      			@Override
      			public boolean accept(File f) {
      				return f.getName().toUpperCase().endsWith(".PNG");
      			}
      		});
      		if ( fc.showSaveDialog(frame)==JFileChooser.APPROVE_OPTION ) {
      			File file = fc.getSelectedFile();
      			if ( !file.getName().toUpperCase().endsWith(".PNG") ) {
      				file = new File(file.getParentFile(), file.getName()+".png");
      			}
      			try {
      				ImageIO.write(image, "PNG", file);
      			} catch (IOException e) { 
      				e.printStackTrace();
      			}
      		}
      	}
       
       
      	/**
               * peu importe ce qu'on dessine, c'est pour l'exemple
               */
      	public static void dessiner(Graphics g, int offset, int taille, int nb) {
       
      		for(int i=0; i<nb; i++) {
      			for(int j=0; j<nb; j++) {
      				g.setColor((i%2==j%2)?Color.BLACK:Color.WHITE);
      				g.fillRect(offset+i*taille, offset+j*taille, taille, taille);
      			}
      		}
       
      	}
       
       
      }
    2. La version qui dessine dans le panel et dans l'image avec la même méthode :
      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
      public class DemoCreerFichierImage2 extends JPanel {
       
      	public static final int OFFSET = 10;
      	public static final int SIZE = 20;
      	public static final int NB = 8;
       
      	public DemoCreerFichierImage2() {
      		setPreferredSize(new Dimension(OFFSET*2+SIZE*NB,OFFSET*2+SIZE*NB));
      	}
       
      	@Override
      	protected void paintComponent(Graphics g) {
      		super.paintComponent(g);
      		dessiner(g, OFFSET, SIZE, NB); // on dessine directement dans le panel
      	}
       
      	public static void main(String[] args) {
       
      		JFrame frame = new JFrame("Démo");
      		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       
      		// on dessine d'abord une image
      		BufferedImage image = new BufferedImage(SIZE*NB,SIZE*NB, BufferedImage.TYPE_INT_RGB);
      		Graphics2D g = image.createGraphics();
      		dessiner(g, 0, SIZE, NB);
      		g.dispose();
       
      		JPanel panel = new DemoCreerFichierImage2();
      		frame.add(panel);
       
      		frame.pack();
      		frame.setLocationRelativeTo(null);
      		frame.setVisible(true);
       
      		// sauvegarde
      		JFileChooser fc = new JFileChooser();
      		fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
      		fc.setFileFilter(new FileFilter() {
       
      			@Override
      			public String getDescription() {
      				return "Fichier PNG";
      			}
       
      			@Override
      			public boolean accept(File f) {
      				return f.getName().toUpperCase().endsWith(".PNG");
      			}
      		});
      		if ( fc.showSaveDialog(frame)==JFileChooser.APPROVE_OPTION ) {
      			File file = fc.getSelectedFile();
      			if ( !file.getName().toUpperCase().endsWith(".PNG") ) {
      				file = new File(file.getParentFile(), file.getName()+".png");
      			}
      			try {
      				ImageIO.write(image, "PNG", file);
      			} catch (IOException e) { 
      				e.printStackTrace();
      			}
      		}
      	}
       
       
      	/**
               * peu importe ce qu'on dessine, c'est pour l'exemple
               */
      	public static void dessiner(Graphics g, int offset, int taille, int nb) {
       
      		for(int i=0; i<nb; i++) {
      			for(int j=0; j<nb; j++) {
      				g.setColor((i%2==j%2)?Color.BLACK:Color.WHITE);
      				g.fillRect(offset+i*taille, offset+j*taille, taille, taille);
      			}
      		}
       
      	}
       
       
      }
    3. La version qui sauvegarde directement ce qui est dessiné par la méthode paintComponent, avec la translation donc :

      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
      public class DemoCreerFichierImage3 extends JPanel {
       
      	public static final int OFFSET = 10;
      	public static final int SIZE = 20;
      	public static final int NB = 8;
       
      	public DemoCreerFichierImage3() {
      		setPreferredSize(new Dimension(OFFSET*2+SIZE*NB,OFFSET*2+SIZE*NB));
      	}
       
      	@Override
      	protected void paintComponent(Graphics g) {
      		super.paintComponent(g);
      		dessiner(g, OFFSET, SIZE, NB); // on dessine directement dans le panel
      	}
       
      	public static void main(String[] args) {
       
      		JFrame frame = new JFrame("Démo");
      		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       
      		JPanel panel = new DemoCreerFichierImage3();
      		frame.add(panel);
       
      		frame.pack();
      		frame.setLocationRelativeTo(null);
      		frame.setVisible(true);
       
      		BufferedImage image = new BufferedImage(SIZE*NB,SIZE*NB, BufferedImage.TYPE_INT_RGB);
      		Graphics2D g = image.createGraphics();
      		g.translate(-OFFSET, -OFFSET); // on doit faire une translation pour décaler le dessin
      		panel.paint(g);
      		g.dispose();
       
      		// sauvegarde
      		JFileChooser fc = new JFileChooser();
      		fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
      		fc.setFileFilter(new FileFilter() {
       
      			@Override
      			public String getDescription() {
      				return "Fichier PNG";
      			}
       
      			@Override
      			public boolean accept(File f) {
      				return f.getName().toUpperCase().endsWith(".PNG");
      			}
      		});
      		if ( fc.showSaveDialog(frame)==JFileChooser.APPROVE_OPTION ) {
      			File file = fc.getSelectedFile();
      			if ( !file.getName().toUpperCase().endsWith(".PNG") ) {
      				file = new File(file.getParentFile(), file.getName()+".png");
      			}
      			try {
      				ImageIO.write(image, "PNG", file);
      			} catch (IOException e) { 
      				e.printStackTrace();
      			}
      		}
      	}
       
       
      	/**
               * peu importe ce qu'on dessine, c'est pour l'exemple
               */
      	public static void dessiner(Graphics g, int offset, int taille, int nb) {
       
      		for(int i=0; i<nb; i++) {
      			for(int j=0; j<nb; j++) {
      				g.setColor((i%2==j%2)?Color.BLACK:Color.WHITE);
      				g.fillRect(offset+i*taille, offset+j*taille, taille, taille);
      			}
      		}
       
      	}
       
       
      }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

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

Discussions similaires

  1. Créer une image à partir d'une URL ?
    Par DrySs dans le forum Langage
    Réponses: 1
    Dernier message: 26/01/2006, 09h39
  2. Réponses: 1
    Dernier message: 30/12/2005, 17h14
  3. Créer une image disque
    Par tsing dans le forum Composants
    Réponses: 2
    Dernier message: 14/12/2005, 16h19
  4. 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, 22h16
  5. [Image]Créer une image avec JAVA 1.1
    Par burno dans le forum 2D
    Réponses: 4
    Dernier message: 11/08/2004, 09h19

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