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

Interfaces Graphiques en Java Discussion :

Problème de création d'une image BMP à partir d'un byte[]


Sujet :

Interfaces Graphiques en Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 25
    Par défaut Problème de création d'une image BMP à partir d'un byte[]
    Bonsoir à tous, je sollicite votre aide car j'ai une exception que je n'arrive pas à résoudre.
    Le but du code suivant est de réceptionner une image BMP sur une socket (protocole tcp_push) et de l'afficher.
    Malheureusement, lorsque j'essaye de créer l'image à partir du tableau de byte, j'obtiens l'exception suivante : java.lang.RuntimeException: New BMP version not implemented yet.
    Si quelqu'un sait de quoi il en retourne ou a un moyen différent de créer l'image, je suis preneur !

    Voici 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
     
     
    /* donnees est la socket sur laquelle on recoit les images en provenance d'un serveur */
     
    BufferedReader in = new BufferedReader(new InputStreamReader
    		(donnees.getInputStream()));
    String chaineLue = new String ();
    int num_image = 0; // numero de l'image
    int taille = 0; // Taille de l'image
    int nbLus = 0; // nb d'octets lus
     
    chaineLue = in.readLine();
    num_image = Integer.parseInt(chaineLue);
    chaineLue = in.readLine();
    taille = Integer.parseInt ( chaineLue );
    char [] tab = new char [taille];
    nbLus = in.read ( tab, 0, taille );
    /* si on a pa lu ce qu'il faut, on doit relire */
    while ( nbLus < taille ) {
    	nbLus += in.read ( tab, nbLus, taille - nbLus);
    }
     
    byte[] imageData = new byte[taille];
    imageData = toByteArray(tab); // methode qui cast char[] en byte[]
    InputStream is = new ByteArrayInputStream(imageData);
    BufferedImage image = ImageIO.read(is); // genere l'exception en question
     
    Graphics g = image.createGraphics();
    g.drawImage(image,0,0,null);
    g.dispose();
    Merci d'avance

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 901
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 901
    Billets dans le blog
    54
    Par défaut
    La raison en est clairement indiquée dans le message : ImageIO ne gère pas cette révision récente du format BMP.

    Essaie de transmettre ton flux dans un autre format (PNG) par exemple ou lit la doc de ImageIO pour voir comment implémenter un décodeur prenant en charge cette révision du format BMP.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 25
    Par défaut
    Arf c'est ce que je pensais et le problème c'est que le serveur n'envoie que des BMP, je ne peux pas lui demander d'envoyer du JPEG
    Pour l'histoire de faire mon propre décodage, tu as des idées particulières parce que ça me paraît compliqué quand même...

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 901
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 901
    Billets dans le blog
    54
    Par défaut
    Tu peux essayer de trouver une lib qui supporte plus de formats bitmaps.

    http://image4j.sourceforge.net/
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 25
    Par défaut
    Merci pour la librairie. J'ai essayé de m'en servir mais j'obtient une nouvelle exception ( java.io.IOException: Unrecognized bitmap format: bit count=1, compression=24 ). Du coup, je me demande si ma conversion char[] -> byte[] s'effectue correctement car je ne vois pas quoi d'autre pourrait générer une erreur sachant que je reçois bien tous les paquets.
    Voici ma méthode de conversion :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public static byte[] toByteArray(char[] array) {
    	return toByteArray(array, Charset.defaultCharset());
    }
     
    public static byte[] toByteArray(char[] array, Charset charset) {
    	CharBuffer cbuf = CharBuffer.wrap(array);
        ByteBuffer bbuf = charset.encode(cbuf);
        return bbuf.array();
    }
    Quelqu'un a une idée ???

Discussions similaires

  1. java/opencv : Création d'une image png à partir de sa chaîne ?
    Par blackbird1 dans le forum API standards et tierces
    Réponses: 9
    Dernier message: 27/02/2014, 20h44
  2. Réponses: 11
    Dernier message: 22/07/2008, 15h04
  3. Réponses: 1
    Dernier message: 03/01/2006, 17h46
  4. [ImageMagick] Header envoyé lors de la création d'une image
    Par KLiFF dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 25/10/2005, 16h35
  5. Problème pour afficher une image bmp
    Par homeostasie dans le forum MFC
    Réponses: 6
    Dernier message: 08/05/2005, 18h36

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