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

C++ Discussion :

Explication sur un code source


Sujet :

C++

  1. #1
    Membre confirmé Avatar de Sarah!
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 71
    Par défaut Explication sur un code source
    salut à tous!
    j'aimerais avoir des explications sur ce code source en c++ builder.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for (int y = 0; y < pBitmap->Height; y++)
          for (int x = 0; x < pBitmap->Width; x++)
            {
            c=(pBitmap->Canvas->Pixels[x][y] & 0x000000C0) >> 6;
            c+=(pBitmap->Canvas->Pixels[x][y] & 0x0000C000) >> 12;
            c+=(pBitmap->Canvas->Pixels[x][y] & 0x00C00000) >> 18;
            ++V[c];
            }
    pBitmap :pointeur.
    merci.

  2. #2
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Je vais t'expliquer la première ligne, le reste c'est pareil :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c=(pBitmap->Canvas->Pixels[x][y] & 0x000000C0) >> 6;
    L'opérateur & : masque binaire. C'est un opérateur qui manipule les bits. pour en savoir plus.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Pixels[x][y] & 0x000000C0
    Bon là on se rend tout de suite compte qu'on travaille sur du 32 bits. 0x000000C0 donne en binaire : 1100 000. Donc en sortie on va récupérer les 6 ème et septième bits de ton image en partant des bits de poids faibles ( à droite) en ignorant les valeurs des autres bits. On obtient donc par exemple:
    000000000000000000000000ab000000
    où a valent chacun 0 ou 1. Le problème c'est que les bits ici maintenant sont mal placés, on va devoir les décaler sur le côté pour lire la valeur de ces 2 bits ensemble.
    c'est l'opérateur de décalage de bits (toujours et encore pour en savoir plus).

    Sur l'exemple précédent, ça nous donne:
    000000000000000000000000000000ab

    Idem pour les autres lignes. La seule réponse que je ne pourrai pas te donner, c'est à quoi servent ces bits...

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 394
    Par défaut
    Ce code prend, pour chaque pixel, les deux bits de poids fort de chaque couleur, et regroupe ça en plus petit:
    xxxxxxxxxxxxxxxxxxxxxxxx 48 bits
    -->xxxxxx 6 bits
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Invité(e)
    Invité(e)
    Par défaut
    Après le conversion de 48 en 6 bits, le tableau V est mis à jour. ( ++V[c]; )
    V est un histogramme de l'image.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("il y a %d pixel blancs\nil y a %d pixels noirs.\n",V[0x3F], V[0X00]);

  5. #5
    Membre confirmé Avatar de Sarah!
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 71
    Par défaut Re
    bonjour,
    merci bien c'est cool
    bonne continuation

  6. #6
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    En effet... C'est bien un histogramme...

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

Discussions similaires

  1. explication sur un code perl
    Par Melvine dans le forum Langage
    Réponses: 5
    Dernier message: 05/10/2006, 16h32
  2. Explication sur du code javascript
    Par griese dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 21/07/2006, 09h40
  3. cherche explication sur du code
    Par abdoulzak dans le forum Langage
    Réponses: 1
    Dernier message: 06/07/2006, 10h23
  4. besoin d'explications sur un code
    Par NAHIAG dans le forum C
    Réponses: 8
    Dernier message: 28/05/2006, 12h37
  5. erreur sur un code source basique
    Par helix_tp dans le forum Langage
    Réponses: 4
    Dernier message: 23/01/2006, 21h55

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