Probléme dans la modification des pixels [Résolu]

- - Dernière réponse : cs_jojolemariole
Messages postés
519
Date d'inscription
mercredi 21 mars 2007
Dernière intervention
19 décembre 2016
- 18 avril 2013 à 18:03
salut
j'ai crée un code pour modifier une image coloré vers une image de niveau de gris.
et ce code n'a pas marcher avec moi.(et le problème dans la modification des couleurs de pixels...mais j'ai pas connue comment le corrigé.aidez moi svp.et est ce qu'il y a une amélioration que je peut appliquer sur le code.
-l'excution de programme est affiché l'image originale dans une Jframe.mais la modification ne ce fait pas.et il affiche des exceptions.

import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JApplet;
import javax.swing.JFrame;

/**
 *
 * @author acer
 */
public class Dessiner extends JApplet{
    private ImageIcon img1,img2;
    BufferedImage bufimage,b2;

    String s;
    private int width;
    private int height;
       public Dessiner(String s){
            this.s=s;
       }
    
       public void init(){
        
            File fichier=new File(this.s);
           
                try {
                    bufimage = ImageIO.read(fichier);
                }
                catch (IOException ex) {
                    System.out.println(ex);
                }
          
         
        }

    
         public void paint(Graphics g){
          
               int rvb;
               int i;
               int j;
               g.drawImage(bufimage,50,50,null);
               for(i=0;i<bufimage.getHeight();i++){
                for(j=0;j<bufimage.getWidth();j++){

                    Color c=new Color(bufimage.getRGB(i, j));
                    
                    int r=c.getRed();
                    int b=c.getBlue();
                    int v=c.getGreen();
                    rvb=(int)(r * 0.299 + v * 0.587 +b *0.114);
                    
                    Color color=new Color(rvb, rvb, rvb);
                     b2.setRGB(i,j,color.getRGB());//là le problème exactement je pense

                }
            
         }
            g.drawImage(b2,100,100,null);
            File output=new File("D:/imageNB");
            try {
              ImageIO.write(b2, "jpg", output);
              System.out.println("le fichier est crée:"+output);
            }
            catch (IOException ex) {
              System.out.println("erreur:"+ex);
            }
         
            }

    public static void main (String args[]){
          
          JFrame f=new JFrame("hello world");
          Dessiner a1=new Dessiner("D:/hello2.jpg");
 
          a1.init();
          
          f.add("Center",a1);
          f.setSize(800,600);
          f.show();
          f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          
       
            }
  
}

Afficher la suite 

Votre réponse

1 réponse

Meilleure réponse
Messages postés
519
Date d'inscription
mercredi 21 mars 2007
Dernière intervention
19 décembre 2016
3
Merci
Salut,

On n'est plus au temps des "segmentation fault" ou autres messages abscons, les exceptions de Java sont riches en informations, donc plutôt que nous dire : "Il y a des exceptions.", donnez-les nous au complet.

Je devine qu'il y a au moins une NullPointerException puisque la BufferedImage b2 n'est jamais initialisée.

Ensuite, tes boucles sont inversées (i et j). À moins que ton image ne soit carrée, ça plantera forcément.

Enfin, tu aurais pu t'abstenir de faire la conversion en N&B manuellement.

Conclusion ce code fait à peu près la même chose :
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JComponent;
import javax.swing.JFrame;

/**
 * @author Jonathan Guéhenneux
 */
public class Dessiner extends JComponent {

private static final long serialVersionUID = 1L;

private BufferedImage imageCouleurs, imageGris;

/**
 * @param cheminImageCouleurs
 * @throws IOException
 */
public Dessiner(String cheminImageCouleurs) throws IOException {

File fichierImageCouleurs = new File(cheminImageCouleurs);
imageCouleurs = ImageIO.read(fichierImageCouleurs);
int largeur = imageCouleurs.getWidth();
int hauteur = imageCouleurs.getHeight();

imageGris = new BufferedImage(largeur, hauteur, BufferedImage.TYPE_BYTE_GRAY);
imageGris.getGraphics().drawImage(imageCouleurs, 0, 0, null);

File fichierImagesGris = new File("D:/imageGris.jpg");
ImageIO.write(imageGris, "jpg", fichierImagesGris);
System.out.println("Le fichier est créé :" + fichierImagesGris + ".");

setPreferredSize(new Dimension(largeur, hauteur));
}

@Override
public void paintComponent(Graphics graphics) {

graphics.drawImage(imageCouleurs, 50, 50, null);
graphics.drawImage(imageGris, 100, 100, null);
}

/**
 * @param args
 * @throws IOException
 */
public static void main(String args[]) throws IOException {

Dessiner test = new Dessiner("D:/Capture.JPG");
JFrame fenetre = new JFrame("Test conversion gris");
fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fenetre.add(test);
fenetre.pack();
fenetre.setVisible(true);
}
}

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 102 internautes ce mois-ci

Commenter la réponse de cs_jojolemariole

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.