Accueil > Forum > > > > afficher bitmap 256 couleurs
afficher bitmap 256 couleurs
mardi 31 août 2004 à 23:26:29 |
afficher bitmap 256 couleurs

mat74
|
salut, voila j'aimerai afficher un bitmap de 256 a l'ecran en mode 320*200*256 ( fonction 12h de l'interruption 10h ) j'ai fais un prog qui d'abord ouvre le bitmap ( int 21h ah=3dh ) ensuite je place le curseur a l'octet 54 ( int 21h ah=42h ), puis je lis 10 000 octets car je sais que l'image fait 100*100 ( int 21h ah=3Fh ) et je place tt sa ds un buffer . puis ensuite je fais sa pr afficher directement sur l'ecran : ; Initialisation du segment pour l'adresse de l'ecran mov ax, 0A000h mov es, ax
mov bx, 0 xor di, di mov cx, 10000 boucle:
mov al, buffer+di ;shl al, 2 inc bx inc di mov byte ptr es:[bx], al push bx mov ax, di xor dx, dx mov bx, 100 div bx pop bx cmp dx, 0 jne non add bx, 220 non: loop boucle
| mais ia un gros pb il m'affiche n'importe quoi sur l'ecran . je sais pas trop ce que c'est je pensais qu'il fallait peut etre convertir la couleur prise ds le bitmap mais je ne suis pas sur et si c'etait le cas comment faire ? merci d'avance @+
|
|
mercredi 1 septembre 2004 à 03:41:11 |
Re : afficher bitmap 256 couleurs

Gobillot
|
essaye plutôt le mode 13h. d'autre part en format 256 couleurs, on n'a pas directement la couleur, mais un numéro de couleur, il faut donc aller chercher la couleur dans la palette de couleur. voir le format d'un fichier BMP.
Daniel
|
|
mercredi 1 septembre 2004 à 11:17:35 |
Re : afficher bitmap 256 couleurs

mat74
|
oui je me suis tromper , je voulais dire 13 . j'ai deja essayer avec le mode 12 , mais c'est encore pire , il m'affiche que du noir et du blanc . tu peux expliquer + en detail comment je peux faire pr recuperer la couleur ?
|
|
mercredi 1 septembre 2004 à 14:37:36 |
Re : afficher bitmap 256 couleurs

mat74
|
re ,
j'ai chercher et j'ai trouver des informations sur la palette . mais j'ai un autre probleme comment je convertis la couleur rvb que j'ai trouvé ds la pallete pr pouvoir l'afficher sur l'ecran . j'ai crus comprendre qu'il y avais une palette vga mais je ne sais pas comment on y accede
|
|
mercredi 1 septembre 2004 à 16:56:33 |
Re : afficher bitmap 256 couleurs

ToutEnMasm
|
Salut, Bien que je préfère de beaucoup masm32 j'ai un peu tater du bitmap en assembleur du temps ou c'était faisable. Le format Bitmap est le plus simple a lire,rien n'est compressé. Il faut se munir du format de fichier,il y a un site pour ça. Ensuite il faut trouver l'emplacement ou se trouve défini le nombre de lignes,la longueur de lignes et l'entrelacement. Une fois muni de ces données il faut avoir l'adresse de fin d'entête du fichier et de début des données graphiques. Sa y est ,c'est gagné:envoyé le nombre d'octets correspondant a la longeur de lignes a l'écran,changer de lignes et ainsi de suite. La connaisance de départ est le format de fichier Savoir si les cartes graphiques supportent maintenant l'adressage directe par es ce qui n'est pas évident.De meilleurs résultats sont envisageables avec une int (probablement int 10h). Vérifier que le système ne bloque pas ce type d'écriture un peu sauvage. ToutEnMasm
|
|
mercredi 1 septembre 2004 à 20:32:15 |
Re : afficher bitmap 256 couleurs

Gobillot
|
Salut, comme tu as pu voir, on trouve dans le fichier BMP après une entête de 54 octets, la palette de couleur a une taiile de 1024 octets soit 4 octets par couleur. ces 4 octets correspondent à un octet pour le Bleu, un octet pour le Vert, un octet pour le rouge, et un octet inutilisé. récapitulation: BITMAPFILEHEADER....14 octets BITMAPINFOHEADER ...40 octets RGBQUAD.....................4 octets par couleur BYTE.............................l'image Bitmap dans l'image Bitmap, un octet correspond à 1 pixel, la couleur se trouvant dans la table de couleur. pour l'écran en mode 256 couleurs, chaque point de l'écran de la RAM vidéo est représenté par un octet qui correspond à une couleur entre 0 et 255 pour ce point. La carte VGA considère ce code couleur comme un index direct de la table de couleurs DAC d'où est extraite la couleur finale du poin concerné. ouf! j'espère avoir été clair. conclusion il faut changer les couleurs des registres DAC. Pour modifier un registre de couleur DAC, il faut mettre son numéro (0-255) dans le registre Pel Write Address (3C8h), et il fait transmettre la nouvelle couleur dans le registre Pel Data (3C9h) ceci se faisant en trois fois: dans le style:
'DS:SI pointe sur la table de couleur (celle du BMP) MOV CX,256 XOR BX,BX MOV DX,3C8h debut: 'BX contient le numéro de couleur MOV AL, BL OUT DX,AL INC DX LODSB 'envoyer le Bleu OUT DX,AL LODSB 'envoyer le Vert OUT DX,AL LODSB 'envoyer le Rouge OUT DX,AL DEC DX INC BX LOOP debut
en principe on est pas obligé de répéter le OUT dans le registre 3C8h, l'incrément se faisant automatiquement aprés la sortie des 3 composants de couleur dans le registre Pel Data... (à tester)
Bonne Prog.
|
|
mercredi 1 septembre 2004 à 22:33:44 |
Re : afficher bitmap 256 couleurs

mat74
|
tt dabord merci de vos reponse .
Gobillot > j'ai regarder ton code , merci , j'ai po tt compris mais je regarderai + en detail demain et je vs dirais si sa marche .
|
|
mercredi 1 septembre 2004 à 23:06:47 |
Re : afficher bitmap 256 couleurs

Gobillot
|
de rien mat74. tester la fin de ligne à chaque octet avec une div c'est pas très performant. soit DS:SI début de la Bitmap et ES:DI début de l'adresse vidéo ;dimensions à prendre dans l'entête MOV CX,100 ;Largeur de l'image MOV AX,100 ;Hauteur de l'image
MOV BX,320 SUB BX,CX boucle: PUSH CX REP MOVSB POP CX ADD DI,BX DEC AX JNZ boucle
|
|
|
jeudi 2 septembre 2004 à 13:24:28 |
Re : afficher bitmap 256 couleurs

mat74
|
voila j'ai presque reussi a aficher l'image mais il reste qqs petit pb. au niveau de la palette c'est bon car j'ai les bonne couleur a l'ecran . mais le dessin est un peu mélanger . au depart le dessin etait inversé hrizontalement et verticalement. donc j'ai fais sa et maintenant cest + inversé mais c'est encore decalé. Changer_pos_curseur_fichier handle,01h,1078 Lire_fichier handle,buffer,10000,0 mov bx, 100*320 xor di, di mov dx, 100 mov cx, 10000 boucle: mov al, buffer+di mov byte ptr es:[bx], al inc bx inc di dec dx cmp dx, 0 jne non sub bx, 420 mov dx, 100 non: loop boucle
|
l'image : 1 2 3 4 5 6 7 8 9 et l'image a l'ecran 3 1 2 6 4 5 9 7 8 la derniere colone est passé en 1er en + le bas de l'image est coupé et au dessus de l'image il y a qq ligne de n'importe koa comment faire ?
|
|
jeudi 2 septembre 2004 à 14:25:22 |
Re : afficher bitmap 256 couleurs

Gobillot
|
Oui surprise, dans un fichier BMP les lignes sont inversées, on trouve la dernière ligne au début et la première ligne à la fin. Par contre au niveau d'une ligne, les octets vont bien de gauche à droite. C'est quoi les dimensions de l'image ? 100x100 320x100 ? On les trouve en position 12h et 16h en Dword. je te fait le plan pour un 320x100
entête position 0 Longeur 54 palette position 54 Longeur 1024 dernière ligne position 1078 Longueur 320 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - première Ligne position 32758 Longueur 320
total fichier = 54 + 1024 + 320*100 --> 33078
tu dois partir de la fin moins Longueur d'une ligne donc bx=32758 au départ et soustraire Longueur d'une ligne plus 320 donc sub bx,640
mais pourquoi tu met dx à 100 ?
pour du 100x100 bx=10978 sub bx,420 dx=100 pour du 100x320 bx=32978 sub bx,420 dx=100 pour du 320x200 bx=64758 sub bx,640 dx=320 pour du 320x100 bx=32758 sub bx,640 dx=320
|
|
Cette discussion est classée dans : afficher, mov, bx, di, bitmap
Répondre à ce message
Sujets en rapport avec ce message
afficher un pixel [ par oclone ]
hello, j'aimerais faire une librairie graphique en c++ mais pour cela il faut deja que je puisse afficher un point, j'ai pensé que la meilleur solutio
pb mov [di+si], [bx+si] [ par nicographx ]
bonjourj'ai un problème : je cherche à faire une instruction de typemov [di+si], [bx+si]mais je ne voit pas comment faire, il me ressort toujours la m
boot system [ par henri12 ]
salut je viens de trouver ce code qui permer de lancer un fichier sur une disquettr a: exemple systemje voudrais qu il me lance le jeu pong sur a: j
afficher un caractère avec int 10h [ par thicdorb ]
bonjour à tous,je suis débutant en assembleur et je commence par le début : afficher un caractèrej'utilise l'inteeruption BIOS 10h mov al, 'A'
modification d'interruption au boot [ par Yoha ]
Bonjour, je me suis remis à l'assembleur (sous debug pour éviter les compilations) et j'ai modifié l'interruption 80h. Cela fonctionne très bien sous
boot secteur [ par henri12 ]
salutje viens de decompiler le boot secteur d une disquette de demarrageje voudrais savoir ou puis je mettre 15 octet de code que je veux faire execut
tableau avec 8086!help me [ par ASBYoucef ]
bonsoir!j'ai fait un programme qui saisie un tableau,puis il cherche le maximum,mais le problème c'est que il donne une résulata fausse,il donne la de
pb avec JMP [ par kaka83185 ]
salut tous le monde,je reste comme d'habitude,débutant en assembleur,je travaille avec emu8086,et j'essaye de faire un programme qui fait les branchem
ERREUR DE SEGMENTATION en asm [ par tahsgh ]
salam; jai le code suivant ----------------------------------------- global main SECTION . text main :
Affichage décroissant et alphabétique de 2 listes(Nom_Prénom et Note) [ par m_didi9 ]
[code=autre]Data SEGMENT Mess1 DB 10,13, 'Entrez la liste des Noms :' DB 10, 13, '$' Mess2 DB 'Entrez la liste des Notes :' DB 10, 13, '$' Mess3
Livres en rapport
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|