Probléme dans la modification des pixels

Résolu
elkantara - 18 avril 2013 à 15:55
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre 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);
          
       
            }
  
}

1 réponse

cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
18 avril 2013 à 18:03
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);
}
}
3
Rejoignez-nous