Problème de conversion Image en byte[] et byte[] en Image

Signaler
Messages postés
3
Date d'inscription
dimanche 19 septembre 2004
Statut
Membre
Dernière intervention
12 avril 2010
-
Messages postés
34
Date d'inscription
samedi 14 juin 2008
Statut
Membre
Dernière intervention
5 février 2010
-
A voir également:

2 réponses

Messages postés
3
Date d'inscription
dimanche 19 septembre 2004
Statut
Membre
Dernière intervention
12 avril 2010

Bonjour a tous,

J'ai un petit problème. j'ai réalisé un programme qui permet de capturer des images à partir d'une Webcam en utilisant l'api JMF. Une fois l'image capturée je voudrais l'envoyer par UDP à un client pour qu'il l'affiche dans une applet.

Pour envoyer l'image en UDP, il faut l'envoyer en byte[]. Or lorsque l'applet récupère l'image, elle récupère un byte[] qu'elle doit convertir en Image pour pouvoir l'afficher.

C'est ici que ça ne passe pas. La conversion "Image en byte[]" et "byte[] en Image" que j'utilise ne fonctionne pas. L'image que j'ai apres les conversion est toute noir.

Voici le code que j'utilise pour convertir:

  
// conversion "Image en byte[]"
  private byte [] getImgBytes(Image image)
     {
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
         try {
             ImageIO.write(getBufferedImage(image), "JPEG", baos);
         } catch (IOException ex) {
             //handle it here.... not implemented yet...
         }
         return baos.toByteArray();
     }


// conversion " byte[] en Image"
   public Image getbyteimg(byte[] buf)
   {   
        ImageIcon imageIcon = new ImageIcon(buf);
        return imageIcon.getImage();
    }



Est-ce que quelqu"un pourrait m'aider.(J'ai déja fait des recherches sur internet mais les solutions proposés ne fonctionnent pas.)
Messages postés
34
Date d'inscription
samedi 14 juin 2008
Statut
Membre
Dernière intervention
5 février 2010

Bonjour,

Tu peux peut-être essayer de créer toi même ton algorythme de conversion de l'image en byte et vice versa.
Pour cela, il te suffit de mettre la taille de l'image sur les 8 premiers octets et ensuit d'envoyer le code de chaque pixel (codé sur 3 ou 4 ostets = 24 ou 32 bits selon l'encodage de l'image.
Pour celà, utilise la classe BufferedImage,qui te permet de récupérer la couleur de chaque pixel qui tu met dans un tableau de byte et ensuite que tu envoies.
Pour cela, fais BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
Sinon, utilise BufferedImage.TYPE_INT_ARGB_PRE  a la place de BufferedImage.TYPE_INT_ARGB pour avoir la transparence.
Ensuite, récupère le graphique du BufferedImage avec la méthode createGraphics et dessine ton image.
pour récupérer les pixels, utilise la méthode gtRGB(x,y) de la classe BufferedImage.
Pour plus d'infos, je te renvoie à l'API java.

J'espère que cette réponse résoud ton problème.