Chemin d'accès a une image [Résolu]

Messages postés
74
Date d'inscription
mardi 29 octobre 2013
Dernière intervention
9 juillet 2016
- 8 nov. 2015 à 20:39 - Dernière réponse :
Messages postés
74
Date d'inscription
mardi 29 octobre 2013
Dernière intervention
9 juillet 2016
- 12 nov. 2015 à 16:54
Bonsoir,
Je veut pouvoir extraire chaque image d'un dossier afin de faire des traitements dessus mais ça ne veut pas marcher puisque mon fichier contient plusieurs images donc il faut que je fasse une boucle pour accédé a chaque image de mon fichier du coup le nom de mon chemin change a chaque fois et quand je concatène le nom d'une image a mon chemin ça ne marche pas :( je ne comprend pas
Voici mon code
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package image;

import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;

/**
 *
 * @author bureau
 */
public class Image {
    /**
     * @param args
     *            the command line arguments
     */
    // Methode 1-> pour compter le nombre d'image dans le fichier
    public int nbrImages() {
        File repertoire = new File("C:\\\\Users\\\\bureau\\\\Desktop\\\\M2\\\\IMM\\\\Tp\\\\IMM");
        String[] listeimages;
        listeimages = repertoire.list();
        return listeimages.length;// length->definit la longeur d'un tableau
    }

    public String[] ContenuFichier() {
        File repertoire = new File("C:\\\\Users\\\\bureau\\\\Desktop\\\\M2\\\\IMM\\\\Tp\\\\IMM");
        String[] listeimages;
        listeimages = repertoire.list();
        return listeimages;
    }

    public static void main(String[] args) throws IOException {
        int nbrImag;
        String[] contenu;
        Image I = new Image();
        nbrImag = I.nbrImages();// le nombre d'image du fichier
        contenu = I.ContenuFichier();// Le contenu du fichier
        BufferedImage b;
        for (int compte = 0; compte < nbrImag; compte++) {
            b = ImageIO.read(new File("C:\\Users\\bureau\\Desktop\\M2\\IMM\\Tp\\IMM\\" + contenu[compte] + ".jpg"));
            int h = b.getHeight();
            int w = b.getWidth();
            Color[][] image = new Color[w][h];
            for (int wi = 0; wi < w; wi++) {
                for (int hi = 0; hi < h; hi++) {
                    Color pixel = new Color(b.getRGB(wi, hi));
                    image[wi][hi] = pixel;
                    System.out.println("Case :" + "[" + wi + "]" + "[" + hi + "]" + pixel);
                }
            }
        }
    }
}

et voici l'erreur

Exception in thread "main" javax.imageio.IIOException: Can't read input file!
at javax.imageio.ImageIO.read(ImageIO.java:1301)
at image.Image.main(Image.java:53)
Java Result: 1

je vous remercie d'avance
Afficher la suite 

Votre réponse

6 réponses

Messages postés
15827
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
18 novembre 2018
- 8 nov. 2015 à 21:25
0
Merci
Bonjour,

Déjà je trouve que tu as pas mal de redondance dans ton code, par exemple nbrImages() et ContenuFichier() font exactement la même chose (à la dernière ligne près) et en fait elles ne font pas grand chose.

Je vais refaire plus simple :

package image;

import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

public class Image {

    public static void displayImage(File file, BufferedImage img) {
        int height = img.getHeight();
        int width = img.getWidth();
        for (int x = 0; x < width; x++)
        for (int y = 0; y < height; y++) {
            Color pixel = new Color(img.getRGB(x, y));
            System.out.printf("%s (x=%d, y=%d) : red=%d, green=%d, blue=%d, alpha=%d\n",
                file.getAbsolutePath(), x, y,
                pixel.getRed(), pixel.getGreen(), pixel.getBlue(), pixel.getAlpha());
        }
    }

    public static void main(String[] args) {
        File path = new File("C:/Users/bureau/Desktop/M2/IMM/Tp/IMM");
        for (File file : path.listFiles()) {
            try {
                BufferedImage img = ImageIO.read(file);
                if (img != null)
                    displayImage(file, img);
            } catch (IOException e) {
                continue;
            }
        }
    }
}
Messages postés
74
Date d'inscription
mardi 29 octobre 2013
Dernière intervention
9 juillet 2016
- 8 nov. 2015 à 23:14
Je vous remercie pour votre aide ça marche très bien vos astuces son rées utile, mais je voudrais comprendre l'utilité de la classe file et quand est ce qu'ont en a besoin? et la composition de la classe colore ?est ce que vous pouvez m'indiquez de bon tutos sur java netBeans
encore merci
Messages postés
15827
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
18 novembre 2018
- 9 nov. 2015 à 18:46
"je voudrais comprendre l'utilité de la classe file et quand est ce qu'ont en a besoin?"

Les objets de type File permettent de décrire l'emplacement d'un fichier ou d'un répertoire et en connaitre quelques propriétés (s'il existe, avoir sa taille, s'il est en lecture seule, si c'est un fichier caché, etc.)

On utilisera donc un objet File pour indiquer où se trouve un fichier, comme ici pour pouvoir lire une image, la méthode ImageIO.read prend en paramètre un objet File.

Voir la documentation :
http://docs.oracle.com/javase/8/docs/api/java/io/File.html

"la composition de la classe colore ?"
La classe Color ne contient pas grand chose, un entier pour représenter les composantes rouge, vert, bleu et la transparence alpha, et quelques méthodes de manipulation, notamment pour travailler en HSB.

Voir la documentation :
http://docs.oracle.com/javase/8/docs/api/java/awt/Color.html
Messages postés
74
Date d'inscription
mardi 29 octobre 2013
Dernière intervention
9 juillet 2016
>
Messages postés
15827
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
18 novembre 2018
- 9 nov. 2015 à 23:15
Bonjour,
Je vous remercie pour votre aide mais j'ai un problème avec le
 pixel.getRed() 
normalement cette fonction doit retournée un entier (c'est entre 0 et 255 ) mais quand j'exécute le code suivant j'ai une erreur

package image;
import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

public class Image {


public static void displayImage(File file, BufferedImage img) {
int [][] rouge = null;
int [][] vert = null;
int [][] bleu = null;

int [] varmoyrouge;
int [] varmoyvert;
int [] varmoyblei;

String chemin;

int height = img.getHeight();
int width = img.getWidth();

for (int x = 0; x < width; x++)
for (int y = 0; y < height; y++) {
Color pixel = new Color(img.getRGB(x, y));
System.out.print (pixel.getRed());
rouge[x][y] = pixel.getRed();//Mon erreur est la


}

}
public static void main(String[] args) throws IOException {
File path = new File("C:/Users/bureau/Desktop/M2/IMM/Tp/IMM");
File file = new File("C:/Users/bureau/Desktop/M2/IMM/Tp/IMM/m10.jpg");;
BufferedImage img = ImageIO.read(file);
displayImage(file, img);
}
}

Pour quoi il ne veut pas affecté le contenu de pixel.getRed() a rouge[x][y] alors qu'il sont de mème type ?
Merci d'avance
Messages postés
15827
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
18 novembre 2018
>
Messages postés
74
Date d'inscription
mardi 29 octobre 2013
Dernière intervention
9 juillet 2016
- 10 nov. 2015 à 06:40
Bonjour,

Le message d'erreur est important pour comprendre un bug:
NullPointerException at image.Image.displayImage(Image.java:30)

Ici tu as utilisé rouge[x][y] alors que tu as déclaré rouge = null;
Il faut que tu initialises ton tableau pour lui donner une taille, sinon il ne pourra jamais contenir aucune valeur :

int[][] rouge = new int[width][height];
Messages postés
74
Date d'inscription
mardi 29 octobre 2013
Dernière intervention
9 juillet 2016
>
Messages postés
15827
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
18 novembre 2018
- 12 nov. 2015 à 16:54
Merci infiniment pour votre aide ça ma vraiment débloqué :)
Commenter la réponse de KX

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.