Chemin d'accès a une image

Résolu
most27 Messages postés 74 Date d'inscription mardi 29 octobre 2013 Statut Membre Dernière intervention 9 juillet 2016 - Modifié par most27 le 8/11/2015 à 20:56
most27 Messages postés 74 Date d'inscription mardi 29 octobre 2013 Statut Membre 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

1 réponse

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 127
8 nov. 2015 à 21:25
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;
            }
        }
    }
}
0
most27 Messages postés 74 Date d'inscription mardi 29 octobre 2013 Statut Membre 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
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 127
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
0
most27 Messages postés 74 Date d'inscription mardi 29 octobre 2013 Statut Membre Dernière intervention 9 juillet 2016 > KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024
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
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 127 > most27 Messages postés 74 Date d'inscription mardi 29 octobre 2013 Statut Membre 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];
0
most27 Messages postés 74 Date d'inscription mardi 29 octobre 2013 Statut Membre Dernière intervention 9 juillet 2016 > KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024
12 nov. 2015 à 16:54
Merci infiniment pour votre aide ça ma vraiment débloqué :)
0
Rejoignez-nous