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

 Java Discussion :

getRGB pour récupérer niveaux de gris


Sujet :

Java

  1. #1
    Membre habitué
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 379
    Points : 129
    Points
    129
    Par défaut getRGB pour récupérer niveaux de gris
    Bonjour,

    je débute en Java et en traitement d'image.
    Mon problème est le suivant : j'ai une image bmp en niveaux de gris que je récupère dans une bufferedImage via la méthode ImageIO.read(). Pour ça pas de problème.
    Maintenant je veux récupérer la matrice des pixels en niveay de gris (0 à 255), et là, ça bloque.

    J'ai trouvé la méthode getRGB(int startX, int startY, int w, int h, int[] rgbArray, int offset, int scansize) dans la Javadoc, mais je ne comprends pas à quoi correspondent les deux derniers arguments (offset et scansize).

    Et petite question subsidiaire : est ce que via cette méthode le tableau que je récupèrerais sera bien un tableau d'entiers compris entre 0 et 255?

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 845
    Points : 22 855
    Points
    22 855
    Billets dans le blog
    51
    Par défaut
    ici rgbArray n'est pas une simple line de l'image il s'agit d'une matrice de dimensions :

    NbColonnes = scanSize
    NBLignes = rgbArray.lenght / scanSize

    offset c'est le décallage à partir duquel on commence à remplir le tableau.
    Donc pour récupérer toute l'image :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    rgbArray = new int[imageWidth * imageHeight];
    scanSize = imageWidth;
    offset = 0;
    Non avec getRGB(), que ce soit cette version qui marche sur une zone ou l'autre qui fonctionne sur un seul pixel, tu récupères des pixels au format ARGB sur 32-bits :
    • les octets 31 à 24 contiennent l'alpha/la transparence (ou 255 si l'image est opaque).
    • les octets 23 à 16 contiennent le rouge.
    • les octets 15 à 8 contiennent le vert.
    • les octets 7 à 0 contiennent le bleu.

    Il est possible de les récupérer en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int alpha = (rgb >> 24) & 0xFF;
    int red = (rgb >> 16) & 0xFF;
    int green = (rgb >> 8) & 0xFF;
    int blue = (rgb >> 0) & 0xFF;
    Mais comme dans ton cas tu es en niveau de gris tu es assuré que
    alpha == 255 et red == green == blue donc tu n'as besoin que d'en récupérer un des trois.

    Pour reconstruire une couleur RGB à partir d'un niveau de gris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int rgb = (0xFF << 24) | ((gray & 0xFF) << 16) | ((gray & 0xFF) << 8) | ((gray & 0xFF) << 0);
    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 habitué
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 379
    Points : 129
    Points
    129
    Par défaut
    merci beaucoup pour cette réponse très complète.

    du coup, il me reste une question : getRGB permet de récupérer la matrice mais dans un tableau une dimension.
    Du coup, on ne peut pas utiliser deux indices pour récupérer un pixel donné.
    dans le tableau d'entiers qu'on récupère via getRGB, est ce que les entiers sont rangés colonnes par colonne ou ligne par ligne ?

  4. #4
    Membre habitué
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 379
    Points : 129
    Points
    129
    Par défaut
    c'est bon, j'ai trouvé la réponse : les lignes sont les unes à la suite des autres.
    Donc pour récupérer un pixel situé à la ligne 3, colonne 10 sur une matrice de 15 colonnes, il faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int pixel = tablo[3*15+10]

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/11/2011, 10h19
  2. Réponses: 1
    Dernier message: 19/03/2010, 10h38
  3. Réponses: 0
    Dernier message: 16/12/2009, 12h12
  4. Réponses: 4
    Dernier message: 05/01/2006, 20h29
  5. Problème pour récupérer la clé primaire
    Par caramel dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 11/04/2003, 13h57

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