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

x86 16-bits Assembleur Discussion :

Visualiser un DIB


Sujet :

x86 16-bits Assembleur

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Visualiser un DIB
    Bonjour à tous et à toutes,
    voilà mon problème :
    j'ai commencé depuis peu la programmation de la carte VGA en assembleur
    à l'aide du magnifique bouquin de M.Abrash "Zen de la programmation graphique ...". Jusque là tout va bien ;mais après quelques examens de code j'ai décidé de passer à l'action en rédigeant moi même un petit programme sensé afficher sur l'écran graphique (mode 320x200) un DIB conçu avec paint.
    Pas de problème me direz-vous ... ben si justement !?
    A la fin du programme je me suis aperçu que je n'avais rien compris sur la représentation mémoire des bitmaps et les données les concernants au sein des 4 plans du vga
    Pire ,je n'arrive pas à me représenter la chose que voici :
    -le bitmap est en 16 couleurs OK
    -4 bits sont necessaires pour décrire dans une structure RGBQUAD les plans couleurs du pixel BON
    MAIS que faire des 3 octets (au lieu de 4) RVB alors qu'il s'agit q'1 seul pixel ?
    On commence avec 4 bits/pixel dans le bitmap et on se retrouve avec 3 octets pour ce seul pixel ?!
    Faut-il executer des décalages ou des rotations de bits entre plusieurs octets avant de les stocker dans les plans mémoire du VGA ?
    Mystère ... quelqu'un(e) peut-il m'aider à débrouiller ce sac de noeuds.

  2. #2
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    Hello,

    ah... le mode VGA 16 couleurs (mode 12h donc) ! ...
    je m'y suis pris la tete ces derniers temps
    (je butais sur l'activation/selection des plans)

    Chaque octets represente 8 pixels.

    donc si tu veux afficher 8 pixels avec les couleurs suivantes :

    00h 0Fh 01h 0Eh 02h 0Dh 03h 09h

    la valeurs des 4 octets sera la suivante :

    0110 0111 = 67h (plan0)
    0101 1010 = 5Ah (plan1)
    0101 0110 = 56h (plan2)
    0101 0101 = 55h (plan3)

    (je ne suis pas sur du sens gauche/droite mais ca c'est pas bien mechant )

    a+ Francois

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut plein les mirettes!

    Merci pour ta clairvoyance, je crois que ça va me plaire ...
    A+ j'espère

  4. #4
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    Salut again,
    merci encore pour ta réponse mais cela n'arrange pas
    trop mes affaires.
    En effet je cherche à afficher un bitmap crée par "paint"
    sur l'écran ;or ,les pixels dans le bitmap sont codés par groupes de 4 bits (normal pour avoir 16 couleurs).
    Donc ,chaque octet du bitmap code 2 pixels : chaque
    quartet sert d'index dans une table RGBQuad qui comporte 4 octets (1 pour le rouge ,1 pour le vert ,1 pour le bleu et 1 réservé).
    MAIS que faire de ces octets !!
    Quels bits prendre en compte ?
    Que faire pour le plan 4 puisqu'on a que 3 octets ?

    Autant de questions qui restent sans réponses.
    Dis m'en plus si tu peux ;sinon ,il va falloir que j'examine à fond le contenu de chaque structure RGBQuad afin de deviner comment s'agencent en fin de compte les pixels de l'image.
    Merci pour ta patience.
    Hello,

    Je ne connais pas le format BMP, mais la table dont tu parles ne ferait-elle
    pas 4x16 octets ? histoire de definir les composantes des 16 couleurs

    Si c'est bien le cas, la table n'est pas directement utilisee pour l'affichage,
    mais doit etre chargee dans les registres DAC (tu peux utiliser une fonnction du BIOS pour ca)

    une fois les couleurs initialisees, il suffit de reprendre le format indique plus haut, et d'envoyer les octets sur les plans de bit.

    a+ Francois

Discussions similaires

  1. empecher la visualisation du code source
    Par Teo dans le forum ASP
    Réponses: 7
    Dernier message: 24/10/2003, 15h11
  2. visualisation et zoom d'une image
    Par julie20 dans le forum Composants VCL
    Réponses: 4
    Dernier message: 11/08/2003, 04h28
  3. visualiser du javascript sous jbuilder
    Par antigone dans le forum JBuilder
    Réponses: 5
    Dernier message: 26/06/2003, 19h23
  4. XSL pour visualiser arbre XML sous forme de tableau en HTML
    Par mattmat dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 28/03/2003, 11h55
  5. Visualisation des mise à jour en réseau
    Par fandor7 dans le forum Paradox
    Réponses: 2
    Dernier message: 06/12/2002, 16h54

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