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

Entrée/Sortie Java Discussion :

reconstitution d'une image a partir d'un tableau de bytes


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 83
    Par défaut reconstitution d'une image a partir d'un tableau de bytes
    bonjour !

    je cherche a reconstituer une image a partir d'un tableau de bytes (comme le titre l'indique)

    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
     
     final ZipInputStream zis = new ZipInputStream(new FileInputStream(file));
     
     
            	ZipEntry ze;
            	byte buf[];
    	        // Parcourt tous les fichiers
    	        while (null != (ze = zis.getNextEntry())) {
     
    	        	buf = new byte[(int)ze.getSize()];
     
    	    		int off = 0;			// Début de l'écriture
    	    		int len = buf.length;	// Nombre d'élément à écrire
    	    		int read = 0;			// Nombre d'élément lu
     
    	    		while ( (len>0) && (read = zis.read(buf, off, len))>0 ) {
    	    			off += read;
    	    			len -= read;
    	    		}
     
            }
    ce code me permet de stocké mon image (contenue dans un .zip appelé "file") dans un tableau de bytes. Ce code fonctionne trés bien pour un fichier texte que j'arrive à lire et à afficher pafaitement ensuite.


    je récupere mon image a partir du byte[], comme celà :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    //methode utilisant les librairie Android  
    (android.graphics.Bitmap & android.graphics.BitmapFactory)
     
            Bitmap bitmap = BitmapFactory.decodeByteArray(buf,0,buf.length);
    ou bien comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            InputStream is = new ByteArrayInputStream(buf);
    mai pour les deux methode j'ai le meme resultat, mon image (que jaffiche, c'est plus pratique) est penchée vers la droite d'environ 50°... (les pixel qui manquent sont alor répétés de l'autre coté horizontalement (je m'explique bien?))

    je pense que ceci est due a la decompression et a l'écriture(ou la lecture) du byte[] qui est mal faite car une image ouverte directement d'un fichier s'affiche normalement...

    pouvez vous m'aider?
    je vou remerci d'avance pour toute aide que vous pourrez m'apporter.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 83
    Par défaut ...
    donnée complémentaire: on peut voir (ou "ne pas voir"^^au choix) une ligne (fine d'un pixel) noire, horizontale, dans le coin inferieure droit...




    il doit manquer quelque byte dans mon tableau car il mank klk pixels ...
    (c'est ma conclusion... dite moi si je me trompe...)

  3. #3
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Je pense plutôt au "scansize" donné lors de la construction de l'image. Ceci représente la largeur de l'image.
    Si tu donnes une valeur trop petite, la fin d'une ligne de l'image se retrouve en début de ligne suivante.
    Comment construis-tu ton image ? Donne le code complet.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 83
    Par défaut :(
    je construit mon image en utilisant la methode .read(buf, off, len) de ZipInutStream (mon image est un fichier contnue dans une archive)

    je montre ce procédé dans le premier bou de code que je donne et rien du reste de mon code ne se rapporte a la lecture de l'image.


    je converti directement mon fichier .jpg en byte[], je ne defini donc aucun "scansize" ... peut etre est-ce un probleme... comment definit-on cette valeur habituellement ?

    ps: merci de t'interresser a mon souci

  5. #5
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Ouhla, je ne comprends plus ce que tu veux.
    Au début, tu demandes comment reconstruire une image à partir d'un tableau de bytes.
    Et maintenant, tu souhaites simplement placer un tableau de byte dans un Zip ?

    Pour le "scansize", c'est à la construction de l'objet représentant l'image. Et tu n'as pas donné le code où tu construis ton objet image (BufferedImage j'imagine ?).
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 83
    Par défaut
    Citation Envoyé par guian Voir le message
    je construit mon image en utilisant la methode .read(buf, off, len) de ZipInutStream (mon image est un fichier contnue dans une archive)

    je montre ce procédé dans le premier bou de code que je donne et rien du reste de mon code ne se rapporte a la lecture de l'image.


    je converti directement mon fichier .jpg en byte[], je ne defini donc aucun "scansize" ... peut etre est-ce un probleme... comment definit-on cette valeur habituellement ?

    ps: merci de t'interresser a mon souci
    pardon je m'exprime peut etre mal sur ce coup la :
    je STOCKE mon image dans mon tableau de byte[] utilisant la methode .read(buf, off, len) de ZipInutStream

    je reconstruit avec BitmapFactory.decodeByteArray();
    me conseillerai tu une autre methode?

    je vai me renseigner sur BufferedImage que pour l'instant je n'utilise pas.

    mais je te rassure tuavai bien compris au debut ^^

    edit: en effet j'utilise une class de la librairie Android :
    http://code.google.com/android/reference/android/graphics/BitmapFactory.html#decodeByteArray(byte[],%20int,%20int)

    peut etre devrais je essayer ta methode, mais comment construit tu une BufferedImage a partir d'un byte[] ?

  7. #7
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Ah ok

    Normalement, la librairie Android devrait fonctionner correctement.
    Pour faire un test, écrit tout le tableau de byte dans un fichier sur disque. Puis utilise ton viewer d'image préféré pour vérifier si l'image s'ouvre correctement.

    Comment le tableau de byte arrive dans le Zip ? Si c'est ton code à toi, tu peux le poster stp ?

    Sinon, au lieu de stocker les données dans un tableau, essaie la méthode "decodeStream(InputStream is)". Ton code sera plus clair et plus court ;-)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/11/2008, 15h36
  2. Récupérer une image JPEG à partir d'une vidéo
    Par kurul1 dans le forum C++Builder
    Réponses: 8
    Dernier message: 09/08/2006, 10h51
  3. [Conception] Construire une image à partir d'un tableau
    Par jacques_henry dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 07/02/2006, 14h53
  4. Réponses: 2
    Dernier message: 06/02/2006, 09h12
  5. [Image] Comment créer une image à partir d'un fichier
    Par mereyj dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 01/07/2005, 21h48

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