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

2D Java Discussion :

java.awt.Image -> byte[]


Sujet :

2D Java

  1. #1
    Membre confirmé Avatar de keil
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    261
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 261
    Par défaut java.awt.Image -> byte[]
    comment vous faites pour récupérer les pixels d'un objet Image et les stocker dans un byte[]?
    (et vice versa si possible)

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 900
    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 900
    Billets dans le blog
    54
    Par défaut
    Dans un int[] plutot si tu veux envoyer l'image/bitmap telle qu'elle. Tout simplement avec la version longue de BufferedImage.getRGB(x, y, ...). Ou en itérant sur la taille de l'image et en utilisant la version courte de la méthode.

    Pour un byte[] ca serait avec la forme compressée de l'image : sauvegarder l'image dans un fichier temporaire ou un ByteArrayOutputstream au format png et mettre le contenu de ce fichier/flux dans un byte[]. Sur le client utiliser le procédé inverse pour décoder l'image.

    Le 2nd cas peut-être intéressant car la forme compressée de l'image prend nettement moins de place.
    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 confirmé Avatar de keil
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    261
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 261
    Par défaut
    ok, j'avais deja testé avec getRGB mais bizzarement, ca me donne un tableau de 0.
    Je comprend pas trop comment m'y prendre avec le ByteArrayInputStream.
    Si t'as un exemple concret ca m'aiderai beaucoup

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 900
    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 900
    Billets dans le blog
    54
    Par défaut
    ca me donne un tableau de 0.
    Aurais-tu mis scansize à 0 ? Pour une récupération complète de l'image : taille du tableau = h*w, offset = 0, scansize = w.

    Si t'as un exemple concret ca m'aiderai beaucoup
    Un truc comme ca (pas testé) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    import java.io.*;
    import javax.imageio.*;
     
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    ImageIO.writeImage(image, 'png", out);
    byte[] bytes = out.toByteArray();
    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 confirmé Avatar de keil
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    261
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 261
    Par défaut
    write(RenderedImage im, String formatName, OutputStream output)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ImageIO.writeImage(image, 'png", out);
    cela suppose que image est de type RenderedImage. Je n'ai qu'un simple objet java.awt.Image.
    ImageRendered est une interface, j'y comprend rien lol

    un peu plus d'aide stp

  6. #6
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 900
    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 900
    Billets dans le blog
    54
    Par défaut
    Si ton image est une instance de BufferedImage ou de RenderedImage) alors => cast !
    (Note : BufferedImage hérite de RenderedImage).

    Sinon créer une nouvelle BufferedImage et recopier l'image originale dedans avec graphics.drawIlmage().

    C'est pas bien dur !!!!
    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

  7. #7
    Membre confirmé Avatar de keil
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    261
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 261
    Par défaut
    ok thx

  8. #8
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 900
    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 900
    Billets dans le blog
    54
    Par défaut
    Une fonction vite-faite, pas optimisée :

    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
     
    public static BufferedImage toBufferedImage(Image source) throws IllegalArgumentException {
      if (source == null) {
        return null;
      }
      else if (source instanceof BufferedImage) {
        return (BufferedImage) source;
      }
      int width = source.getWidth(null);
      int height = source.getHeight(null);
      if ((width <= 0) || (height <= 0)) {
        throw new IllegalArgumentException("Bad size !!!");
      }
      // Si source a de la transparence utiliser TYPE_INT_ARGB à la place.
      BufferedImage result = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 
      // Inutile dans le cas d'images opaques : met le fond de l'image à la couleur transparente.
      /*
      for (int j = 0 ; j < height ; j++) {
        for (int i = 0 ; i < width ; i++) {
          result.setRGB(i, j, 0);
        }
      }
      */
      Graphics graphics = result.createGraphics();
      graphics.drawImage(source, 0, 0, null);
      graphics.dispose();
      return result;
    }
    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

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

Discussions similaires

  1. utiliser java.awt.image et java.awt.Graphics2D
    Par leolio69 dans le forum Android
    Réponses: 3
    Dernier message: 08/12/2011, 23h37
  2. Obtenir une java.awt.Image à partir d'un ShapeFile.
    Par grunt2000 dans le forum SIG : Système d'information Géographique
    Réponses: 0
    Dernier message: 23/11/2010, 12h00
  3. Réponses: 2
    Dernier message: 30/04/2008, 11h30
  4. la classe java.awt.image.Raster
    Par Methode dans le forum 2D
    Réponses: 1
    Dernier message: 07/10/2007, 12h20
  5. java.awt.Image à partir d'un string
    Par lex13 dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 02/08/2007, 10h42

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