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 :

Bits par pixel & mémoire


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2008
    Messages : 67
    Par défaut Bits par pixel & mémoire
    Bonjour,

    Lors de la copie d'information en mémoire (à partir d'un framebuffer par exemple) vers un écran, j'aimerai savoir comment peut on faire correspondre un pixel de 2, 3 voir 4 bits avec une case mémoire de 1 octet?

    Merci.

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    Salut

    Si j'ai bien compris ta question (qui n'est pas très claire), tu veux sortir d'un bloc mémoire des pixels codés sur X bits et disposés les uns à la suite des autres ? du style (exemple sur 3 bits) :
    bits 7, 6 et 5 de l'octet 0 : pixel 0
    bits 4, 3 et 2 de l'octet 0 : pixel 1
    bits 1 et 0 de l'octet 0, bit 7 de l'octet 1 : pixel 2
    bits 6, 5 et 4 de l'octet 1 : pixel 3
    etc...

    C'est bien ça ?
    Dans ce cas, le décalage de bits est ton ami.

  3. #3
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 122
    Billets dans le blog
    148
    Par défaut
    Bonjour,

    On va reprendre un peu ( suivant le titre du sujet )

    Un pixel , en fait, c'est un nombre d'octet, qui dépend de la configuration. Ce nombre on l'appelle très logiquement: Bytes per Pixel ( octets par pixel ).

    Ce nombre change cela la configuration de l'écran, effectivement un pixel ( ou une couleur donc ) peut être codé sur 1, 2, 4, 8, 16, 24, 32 bits, 32bits ayant la transparence en plus.

    Donc, normalement, lors des correspondance mémoire / framebuffer, il n'y a pas de problème, car finalement, un framebuffer est comme une zone mémoire.

    Juste qu'il faut définir assez de mémoire selon la formule:
    Bytes per Pixel * largeur * hauteur

    Voilà, maintenant, si vous le voulez bien reposez votre question de manière très clair et le plus précisément possible.

    Merci
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2008
    Messages : 67
    Par défaut
    Bonjour,

    Pour être plus clair:

    Admettons que je veuille coder chaque pixel en 4 bits (16 couleurs) et que je dispose d'un écran 320x200 (ce qui représente une zone mémoire de (320x200x4) / 8 = 32000 octets)

    J'aimerai que la première partie (4 premier bits MSB) de l'octet 0 de mon framebuffer corresponde au pixel(0,0).
    La seconde partie de cet octet (LSB) corresponde au pixel(1,0)
    etc.. jusqu'au pixel (320,200)

    Donc ma question est comment faire pointer une "partie" d'un octet (dans le fb) vers un pixel?

    J'espère avoir été plus clair

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2008
    Messages : 67
    Par défaut
    Citation Envoyé par jeroman Voir le message
    Salut

    Si j'ai bien compris ta question (qui n'est pas très claire), tu veux sortir d'un bloc mémoire des pixels codés sur X bits et disposés les uns à la suite des autres ? du style (exemple sur 3 bits) :
    bits 7, 6 et 5 de l'octet 0 : pixel 0
    bits 4, 3 et 2 de l'octet 0 : pixel 1
    bits 1 et 0 de l'octet 0, bit 7 de l'octet 1 : pixel 2
    bits 6, 5 et 4 de l'octet 1 : pixel 3
    etc...

    C'est bien ça ?
    Dans ce cas, le décalage de bits est ton ami.
    c'est effectivement ça.. Mais je vois pas trop comment m'y prendre

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 122
    Billets dans le blog
    148
    Par défaut
    Hum, d'accord, mais c'était juste parce que normalement, le framebuffer à la même forme que la mémoire.
    Pour le cas d'un pixel à 16 couleurs ( 4 bits ), les 8 premiers bits du framebuffer forment deux pixels.
    Bon, je vais quand même expliquer le truc
    Le décalage ce fait avec '>>' et '<<'. Les premier décale vers la droite, le deuxième vers la gauche.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    p1 = fb[0];
    p2 = fb[0] >> 4;
    ( Enfin ça dépend si c'est en little ou big indien ... )
    Pour p2 je fais un décalage de 4 bit sur la droite.
    Mais cela ne suffit pas, car p1, peut avoir des informations qui ne le concerne pas. ( les informations de p2 )
    Pour ce cas on va utiliser la masquage de bits ( operation bit par bit )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    p1 = fb[0] & 0x0F;
    Voilà comment, avec un ET logique, on ne va garder que les 4 bits qui nous concerne
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2008
    Messages : 67
    Par défaut
    Héhé merci, c'est exactement ce que je cherchais!

    Sinon, y a t-il un moyen efficace pour assigner les bits aux pixels? là j'assigne avec un modulo (si l'indice % 2 == 0, j'assigne le MSB sinon le LSB)

  8. #8
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 122
    Billets dans le blog
    148
    Par défaut
    Il n'y a pas de moyen de parcourir la mémoire 4 bits par 4 ...
    Du coup, dans le cas précédent, fb[0] donnera toujours deux pixels à la fois.

    Du coup, mais avec un code comme vous sembliez m'indiquer, il n'y a pas moyen d'assigner 1 pixel ou 1 autre. Vous assignerez dans tout les cas, deux pixels à la fois ...

    ( Je ne suis pas sur d'avoir compris la question )
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

Discussions similaires

  1. nombres de bit par pixel
    Par hassiba_45 dans le forum C++Builder
    Réponses: 4
    Dernier message: 13/04/2008, 12h51
  2. nombre de bits par pixel
    Par madjidri dans le forum C++Builder
    Réponses: 1
    Dernier message: 24/05/2007, 16h01
  3. Modifier une image par pixels
    Par mateo.14 dans le forum MFC
    Réponses: 10
    Dernier message: 21/01/2005, 15h09
  4. [TImage] Transfert de Picture par pixels.
    Par H2D dans le forum Langage
    Réponses: 9
    Dernier message: 25/10/2003, 14h37
  5. [VB6] [Graphisme] Transfert d'image pixel par pixel
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 16
    Dernier message: 15/10/2002, 09h53

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