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

Traitement d'images Discussion :

[JAVA] remplir BufferedImage par un tableau d'objet


Sujet :

Traitement d'images

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2012
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 47
    Par défaut [JAVA] remplir BufferedImage par un tableau d'objet
    Bonsoir,

    j'ai un tableau d'objet, résultat d'exécution d'un programme matlab, ce tableau contient les valeurs de la matrice de l'image résultat.
    Comment je peux procéder pour remplir un BufferedImage par ce tableau afin d'afficher l'image par la suite???

    SVP j'ai besoin d'aide !! J'ai beaucoup essayé mais sans aucun résultat !!

  2. #2
    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 : 55
    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
    Billets dans le blog
    2
    Par défaut
    Salut,

    Si tes valeurs sont les composantes RVB des pixels de l'image, il te suffit de créer la BufferedImage comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BufferedImage image = new BufferedImage(width, height, type);
    Avec type :
    1. BufferedImage.TYPE_INT_RGB pour une image opaque
    2. BufferedImage.TYPE_INT_ARGB pour une image transparente (avec une composante alpha)


    Et de boucler sur tes valeurs, en calculant les coordonnées x et y correspondantes (division entière et modulo), puis en appellant image.setRGB(x, y, rgb);.
    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.

  3. #3
    Membre averti
    Inscrit en
    Avril 2012
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 47
    Par défaut
    Merci pour votre réponse.

    Mais,j'ai pas compris ce que vous voulez dire par boucler sur les valeurs, en calculant les coordonnées x et y correspondantes ?!
    la matrice est totalement sauvegardé dans la première case du tableau, c'est l'ensemble de colonne de la matrice de 1 à 64 qui a été affiché.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Object[] image_squelette = reqService.squelImage(imageLu);
    System.out.println(image_squelette[0]);
    Je voudrais savoir s'il y a une autre méthode qui me permet d'afficher l'image sans boucle.

  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 : 55
    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
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par amivb Voir le message
    Mais,j'ai pas compris ce que vous voulez dire par boucler sur les valeurs, en calculant les coordonnées x et y correspondantes ?!
    la matrice est totalement sauvegardé dans la première case du tableau, c'est l'ensemble de colonne de la matrice de 1 à 64 qui a été affiché.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for(int i=0; i<nombreDeValeurs; i++) {
     
        int x = i % width; // x est le reste de la division entière (le modulo) par la largeur
        int y = i / widdth; // y est le quotient de la division entière par la largeur
     
       /* ... */
     
    }
    Citation Envoyé par amivb Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Object[] image_squelette = reqService.squelImage(imageLu);
    System.out.println(image_squelette[0]);
    Je voudrais savoir s'il y a une autre méthode qui me permet d'afficher l'image sans boucle.
    Oui, en passant par le raster de la BufferedImage (voir BufferedImage.getRaster() et WritableRaster), mais ça dépend du type de ton tableau, et des valeurs qu'il y a dedans (ce que représente ces valeurs) : certaineemnt pas avec un tableau d'Object (tableau de int ou de float, oui). Il y'a quoi dans ton tableau ?
    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 ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Par défaut
    Une BufferedImage est en fait un simple tableau 1D. SI ton résultat est en niveaux de gris, tu peux simplement créer un BufferedImage avec les type TYPE_BYTE_GRAY ou TYPE_USHORT_Gray.

    Pour l'écriture :
    Méthode lente => tu utilises getRaster().setSample(x,y,c,val)
    Méthode rapide => tu accèdes directement au DataBuffer.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  6. #6
    Membre averti
    Inscrit en
    Avril 2012
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 47
    Par défaut
    Merci pour vos réponse.

    En fait, si j'exécute le programme en MATLAB , le résultat affiché est une matrice <64x64double> (si l'image est de 64 bit)
    après la génération du programme en code java le résultat (matrice) sera sauvegardé dans une seule case d'un tableau d'objet
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    System.out.println(image_squelette[0]);
    le résultat affiché est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     Columns 1 through 13
     
         0     0     0     0     0     0     0     0     0     0     0     0     0
         0     1     0     0     0     0     0     0     0     0     0     1     1
         0     0     1     0     0     0     0     0     0     0     1     0     0
         .
         .
         .
    Columns 53 through 64
         ....
    j'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    BufferedImage image = new BufferedImage(64, 64,BufferedImage.TYPE_BYTE_GRAY);
    image.getRaster().setDataElements(0, 0, 64, 64, image_squelette[0]);
    mais il m'affiche une exception com.mathworks.toolbox.javabuilder.MWNumericArray cannot be cast to [B

    Est-ce que je peux convertir un objet en double dans ce cas ?

Discussions similaires

  1. Problème pour remplir un tableau d'objet
    Par bobinouze dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 26/12/2009, 18h55
  2. [Java] remplir un BufferedImage par un tableau de pixel
    Par bilzzbenzbilz dans le forum Traitement d'images
    Réponses: 8
    Dernier message: 18/01/2009, 16h08
  3. tableau d'objets en java
    Par lion000 dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 26/04/2007, 08h21
  4. Image a remplir Pixel par Pixel, Quel objet utiliser ?
    Par ZbergK dans le forum GTK+ avec C & C++
    Réponses: 5
    Dernier message: 28/02/2007, 21h35
  5. retour tableau d'objets par service web axis jboss
    Par TrollMaster dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 27/11/2005, 21h45

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