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

Assembleur Discussion :

Prise en charge des images


Sujet :

Assembleur

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Prise en charge des images
    Bonjour.

    J'aimerais savoir comment prendre en charge les images en ASM. Pour mon OS. Je veut afficher une images BMP par exemple. Au démarrage de celui-ci.

    Je n'ai jamais lu de bouquin/livre qui parle de ça.

    Merci et au revoir!

  2. #2
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 937
    Points : 59 415
    Points
    59 415
    Billets dans le blog
    2
    Par défaut
    Bonjour !

    Voici un exemple bien commenté (syntaxe FASM) qui devrait t'aider à comprendre la structure d'un fichier BMP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    ; ***** INTIALISATIONS (MODE VGA, OUVERTURE FICHIER,...) *****
     
         org       100h
     
    .lireBmp:
         pusha
     
         ; es = début de la mémoire vidéo
         mov       ax, 0A000h
         mov       es,ax
     
         ; Initialisation du mode 13h
         mov       ax,13h
         int       10h
     
         ; Ouverture du fichier
         mov       ax,3D00h            ; ouverture de fichier en lecture seule
         mov       dx,nom_fich         ; adresse du nom du fichier
         int       21h
         jc        fin
         mov       bx,ax               ; bx = numéro logique ou handle du fichier
     
         ; On se déplace pour récupérer la taille du BITMAPINFOHEADER
         xor       cx,cx
         mov       dx,14
         mov       ax,4200h            ; fonction de modification de pointeur dans un fichier
         int       21h
         mov       ax,3F00h            ; fonction de lecture
         mov       cx,4                ; on lit 4 octets (double word)
         mov       dx,taille_header    ; Adresse d'offset du buffer
         int       21h
     
         ; On se déplace pour récupérer la palette
         xor       cx,cx
         mov       edx,14
         add       edx,[taille_header]
         mov       ax,4200h            ; fonction de modification de pointeur dans un fichier
         int       21h
         mov       ax,3F00h            ; fonction de lecture
         mov       cx,1024             ; on lit 4 octets (double word)
         mov       dx,palette          ; Adresse d'offset du buffer
         int       21h
     
    ; ***** INITIALISATION DE LA PALETTE DE COULEURS *****
         push      bx                  ; Sauvegarde du handle du fichier
         mov       bp,palette          ; bp = adresse de la palette
         xor       di,di               ; di = offest courant pour le parcours de la palette
         xor       bx,bx               ; bx = n° du registre DAC
    pal:
         mov       ch,[bp+di+1]
         mov       cl,[bp+di]
         mov       dh,[bp+di+2]
         mov       ax,1010h            ; Chargement registre DAC
         int       10h
     
         add       di,4
         inc       bx
         cmp       bx,256              ; Dernier registre ?
         jb        pal
     
         ; On se déplace au début de l'image
         pop       bx                  ; Restauration du handle du fichier
     
         mov       ecx,14
         add       ecx,[taille_header]
         add       ecx,1024
         mov       dx,cx
         shr       ecx,16
         mov       ax,4200h            ; fonction de modification de pointeur dans un fichier
         int       21h
     
    ; ***** CHARGEMENT DE L'IMAGE (en commençant par la dernière ligne) *****
         mov       cx,1                ; lit 1 octet dans le fichier
    haut:
         mov       [x],0               ; abscisse du point
    larg:
         mov       ax,3F00h            ; fonction de lecture
         mov       dx,coul             ; Adresse d'offset du buffer couleur
         int       21h                 ; lecture du pixel dans le fichier
     
         mov       ebp,[x]
         mov       eax,320
         mul       [y]                 ; ax = 320 * y
         add       ebp,eax             ; bp = x + 320 * y
         mov       al,[coul]           ; couleur
         mov       [es:bp],al          ; Affichage du pixel
     
         inc       [x]                 ; colonne suivante
         cmp       [x],320             ; fin de ligne ?
         jb        larg
     
         dec       [y]                 ; ligne précédente
         jns       haut                ; continue tant que ligne >= 0
    fin:
         ; fermeture du fichier
         mov       ah,3eh
         int       21h
     
         ; Presser une touche
         mov       ah,01h
         int       21h
     
         ; Retour en mode texte
         mov       ax,0003h
         int       10h
     
         popa
         ret
     
    ; ***** DECLARATION DES DONNEES *****
    nom_fich:           db        'image.bmp',0       ; chemin du fichier image
    taille_header       dd        ?                   ; taille du BITMAPINFOHEADER
    palette:            times 1024 db 0               ; composantes RVB de la palette
    coul                db        ?                   ; couleur d'un point de l'image
    x                   dd        0                   ; coordonnée x d'un point de l'image
    y                   dd        199                 ; coordonnée y d'un point de l'image
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  3. #3
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    J'ajoute juste pour Pascal.Alain.B que tu as du remarquer que l'interruption 21h est utilisé, donc tu ne pourras faire directement comme ça.

    De manière plus générale, tu peux avoir une petit cours sur le format d'image BMP ici (les sources sont en delphi, mais le principe est là) :
    http://delphi.developpez.com/cours/g...ra/bitmap1.php
    http://delphi.developpez.com/cours/g...ra/bitmap2.php
    http://delphi.developpez.com/cours/g...ra/bitmap3.php
    Je ne répondrai à aucune question technique en privé

Discussions similaires

  1. Réponses: 3
    Dernier message: 14/01/2008, 11h24
  2. Prise en charge des Sous-sous-structure
    Par le_gueux dans le forum 4D
    Réponses: 7
    Dernier message: 21/08/2007, 11h41
  3. annuler la prise en charge des caractaires spéciaux
    Par simodox dans le forum ASP.NET
    Réponses: 1
    Dernier message: 24/05/2007, 08h09
  4. Réponses: 5
    Dernier message: 23/05/2007, 17h48

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