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

most27 74 Messages postés mardi 29 octobre 2013Date d'inscription 9 juillet 2016 Dernière intervention - 8 nov. 2015 à 20:39 - Dernière réponse : most27 74 Messages postés mardi 29 octobre 2013Date d'inscription 9 juillet 2016 Dernière intervention
- 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 

6 réponses

Répondre au sujet
KX 15101 Messages postés samedi 31 mai 2008Date d'inscriptionModérateurStatut 18 décembre 2017 Dernière intervention - 8 nov. 2015 à 21:25
0
Utile
5
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;
            }
        }
    }
}
most27 74 Messages postés mardi 29 octobre 2013Date d'inscription 9 juillet 2016 Dernière intervention - 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
KX 15101 Messages postés samedi 31 mai 2008Date d'inscriptionModérateurStatut 18 décembre 2017 Dernière intervention - 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
most27 74 Messages postés mardi 29 octobre 2013Date d'inscription 9 juillet 2016 Dernière intervention > KX 15101 Messages postés samedi 31 mai 2008Date d'inscriptionModérateurStatut 18 décembre 2017 Dernière intervention - 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
KX 15101 Messages postés samedi 31 mai 2008Date d'inscriptionModérateurStatut 18 décembre 2017 Dernière intervention > most27 74 Messages postés mardi 29 octobre 2013Date d'inscription 9 juillet 2016 Dernière intervention - 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];
most27 74 Messages postés mardi 29 octobre 2013Date d'inscription 9 juillet 2016 Dernière intervention > KX 15101 Messages postés samedi 31 mai 2008Date d'inscriptionModérateurStatut 18 décembre 2017 Dernière intervention - 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.