IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

image to byte array


Sujet :

Collection et Stream Java

  1. #1
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Mai 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Mai 2013
    Messages : 6
    Points : 4
    Points
    4
    Par défaut image to byte array
    je suis debutante en java, je dois ecrire un programme qui convertit une image bmp en tableau de byte, voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
     
     
     
    public class image1 {
     
     
    public static byte [] ImageToByte(File file) throws FileNotFoundException{
          //code of ImageToByte
    	 FileInputStream fis = new FileInputStream(file);
         ByteArrayOutputStream bos = new ByteArrayOutputStream();
         byte[] buf = new byte[(int) file.length()];
         try {
             for (int readNum; (readNum = fis.read(buf)) != -1;) {
     
                 bos.write(buf, 0, readNum);      
                 System.out.println("read " + readNum + " bytes,");
             }
         } catch (IOException ex) {
         }
         byte[] bytes = bos.toByteArray();
         return bytes; 
        }}
    --> et voici mon programme de test :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    public class test {
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
     
    	    try {
    	       byte [] bytes = image1.ImageToByte(new File("C:/Users/loli/Desktop/Orange"));
     
    	  }
    	     catch (Exception e) {
    	   e.printStackTrace();                                         
    		     }       
    		    }
    	}



    --> quand je compile, on me revoi :
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(Unknown Source)
    at image1.ImageToByte(image1.java:15)
    at test.main(test.java:13)



    j'arrive pas a trouver le probleme, est ce que vs pouvez m'aider svp ??

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Pour commencer, il faudrait que tu regardes le message d'erreur entier.
    Là il manque au moins la première ligne, et c'est la plus importante de toutes. Sans elle, on ne peut pas t'aider. Il faut toujours copier/coller l'erreur entière.

    Bon, sinon, le problème n'arrive pas quand tu compiles, mais quand tu exécutes. Après avoir compilé sans aucun problème, donc.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Mai 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Mai 2013
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    merci bcp pour votre aide c vraiment gentil de votre part !
    voilà la totalté du msg d'erreur :



    java.io.FileNotFoundException: C:\Users\loli\Desktop\Orange (Accès refusé)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(Unknown Source)
    at image1.ImageToByte(image1.java:15)
    at test.main(test.java:13)

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    salut

    le message est éloquent : le fichier que tu veux charger n'existe pas.

    il ne manquerait pas juste l'extension, genre ce ne serait pas : C:\Users\loli\Desktop\Orange.bmp
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    ensuite je m'interroge sur le but de ton programme : tu dois convertir une image bmp en tableau de byte.

    ce que tu fais c'est charger le fichier dans un tableau de byte : ce dernier contient exactement les octets du fichier, qui pourrait être n'importe quel type de fichier d'ailleurs, mais pas un tableau qui représente l'image, je veux parler d'un tableau des couleurs des pixels de l'image, qui me semble correspondre plus à la notion de "convertir".

    ce ne serait pas plutôt ça que tu cherches à faire ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Mai 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Mai 2013
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    merci bcp pr votre réponse, j'ai bien étudie votre remarque et j'ai changé mon code !
    ce que je vx faire moi, c de stoker les pixel d'une image bmp, taille 300x300 pixel, codé sur 24 bit dans un tableau ! a la fin le programme doit me renvoyer un tableau de int ! voilà le code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
     
    import java.awt.image.BufferedImage;
    import java.awt.image.ColorModel;
    import java.awt.image.DataBuffer;
    import java.awt.image.DataBufferByte;
    import java.awt.image.IndexColorModel;
    import java.awt.image.Raster;
    import java.awt.image.WritableRaster;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.nio.ByteBuffer;
     
     
     
     
    public class tablepixel {
     
    	public static int byteArrayToInt(byte[] b, int offset, int nbyte) {
    	    int value = 0;
    	    for (int i = 0; i < 4; i++) {
    	        int shift = (4 - 1 - i) *8;
    	        value += (b[i + offset] & 0x000000FF) << shift;
    	    }
    	    return value;
    	}
     
     
    	public static int[] getPixelTable(String absolutePathFileName) {
    		   try {
    		   byte tabBmp[];
    		   int rgbs[] = null;
    		   // création d'un flux
    		   FileInputStream fin = new FileInputStream(absolutePathFileName);
    		   tabBmp = new byte[fin.available()];
    		   fin.read(tabBmp);
    		   if (tabBmp.length >0 ) {
     
    		   	int intLargeur = byteArrayToInt(tabBmp,18,4);
    		   	int intHauteur = byteArrayToInt(tabBmp,22,4);
    		   	int intOffsetPixel = byteArrayToInt(tabBmp,10,4);
    		   	ColorModel monoChromeModel = new IndexColorModel(1,2,
    		     	new byte[] {(byte)0, (byte)255},
    		     	new byte[] {(byte)0, (byte)255},
    		     	new byte[] {(byte)0, (byte)255});
    		   	ByteBuffer BufferTabPixel = ByteBuffer.allocate (tabBmp.length-intOffsetPixel);
    		   	byte[] tabPixel = BufferTabPixel.array();
    		   	DataBuffer db = new DataBufferByte(tabPixel,tabPixel.length);
    		   	WritableRaster wr = Raster.createPackedRaster(db,intLargeur,intHauteur,1,null);
    		   	//creation du BufferedImage
    		   	BufferedImage afpImage = new BufferedImage(monoChromeModel,wr,false,null);
    		   	int w = afpImage.getWidth();
    		   	int h = afpImage.getHeight();
    		   	rgbs = new int[w*h]; /* on crée l'espace nécessaire */
    		 //copie de chaque piskel du bufferedImage (afpImage) vers un tableau d'entiers (rgbs)
    		   	afpImage.getRGB(0,0,w,h,rgbs,0,w);
    		   }
    		   fin.close();
    		   return rgbs;
    		 	} catch(IOException ie) {
    		   System.out.println("Erreur: "+ie);
    		   return null;
    		 	}
    		 }
     
     
    }
    le code d'affichage est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    public class test {
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
     
    	    try {
    	       int [] rgbs = tablepixel.getPixelTable("C:/Users/loli/Desktop/Orange/orange.bmp");
     
    	  }
    	     catch (Exception e) {
    	   e.printStackTrace();                                         
    		     }       
    		    }
    	}
    mais on me revoie les erreurs :
    java.lang.IllegalArgumentException
    at java.nio.ByteBuffer.allocate(Unknown Source)
    at tablepixel.getPixelTable(tablepixel.java:70)
    at test.main(test.java:12)

    aussi j'ai petit problem concernant la fct : byteArrayToInt(byte[] b, int offset, int nbyte) en longueur, largeur et offset
    j'arrive pas a comprendre ce qu'elle doit avoir en argument, précieusement l'offset d'une image bmp, et le nbre d'octets !

    si vous pouvez m'aidez svp, je vous serais reconnaissante vraiment j me suis bloquée

  7. #7
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    - Ce n'est pas comme ça qu'on charge un fichier en mémoire. Notamment InputStream.available() ne te donne pas la taille du fichier (ni rien d'utile d'ailleurs. Il ne faut pas s'en servir.) Et read() ne charge pas forcément toutes les données du fichier (dans ces tailles-là, il est même quasi-certain qu'il ne le fait pas.)
    - Tu crées une BufferedImage et tu mets rien dedans, puis tu essaies de lire des pixels de cette BufferedImage ?? Ils sont forcément tous de la couleur d'index zéro, puisque tu as rien mis dedans -_-°...

    - Pas besoin de tout ça. Charge l'image avec ImageIO.read() et , tu auras une BufferedImage bien remplie, sur laquelle demander sa largeur, sa hauteur, et ses pixels.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Mai 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Mai 2013
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    bien noté !! et voilà g utilisé imageIO.read()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    import java.awt.image.BufferedImage;
    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.IOException;
    import javax.imageio.ImageIO;
     
    /*
     * @author mkyong
     *
     */
    public class imgTab {
     
       public static void main(String [] args){
     
       try{
     
    	BufferedImage originalImage = 
                                  ImageIO.read(new File("C:/Users/loli/Desktop/Orange/orange.bmp"));
     
    	ByteArrayOutputStream baos = new ByteArrayOutputStream();
    	ImageIO.write( originalImage, "bmp", baos );
    	baos.flush();
    	byte[] imageInByte = baos.toByteArray();
    	baos.close();
     
     
    	}catch(IOException e){
    		System.out.println(e.getMessage());
    	}		
       }
     
    }
    je vx juste savoir ce que je dois ajouter pour que mon tableau s'affiche !!
    et merciii bcp pr votre aide !! vs m'avez vraiment sauvé

  9. #9
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    - Là tu as fait que décoder l'image, puis la réencoder, et enregistrer le résultat dans un tableau de bytes. Je ne vois pas l'intérêt.

    - Je ne vois pas non plus l'intérêt d'afficher des centaines de milliers de bytes. Ce sera inexploitable.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Insertion byte array Image Sqlite
    Par ppost dans le forum Android
    Réponses: 4
    Dernier message: 03/03/2014, 11h53
  2. Réponses: 3
    Dernier message: 17/02/2014, 16h25
  3. Transformer une image to byte array
    Par mimomimo dans le forum Débuter
    Réponses: 14
    Dernier message: 15/03/2011, 11h20
  4. Convertir une image en byte array!
    Par zanteskuken dans le forum ASP.NET
    Réponses: 2
    Dernier message: 31/07/2008, 14h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo