|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
Sujet : afficher bitmap 256 couleurs [ Archives / Newbii ] (mat74)
Informations & options pour cette discussion
|
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é 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
MOV CX,ES:[DI] ??? [ par Arnaud16022 ]
hello tout le monde question de newbie, je comprends pas cette command: MOV CX,ES:[DI] bon le mve ca va, le CX itou, mais apres ca coince... plus géné
Assembleur et langage C sous Linux [ par lapinfroid ]
Bonjour a tous ,avant toute chose , je tiens a preciser que j en ai aucune notion d'assembleur Je pratique plutot le C et le JavaDans un programme C ,
Invertion d'une chaine de caractère. [ par deck_bsd ]
Bonjour,Voila je débute en ASM et je veu faire un bête programme qui inverse une chaine de caractère. Je l'ai fait, mais celui-ci, ne va pas vraiment
Livres en rapport
|
Téléchargements
Logiciels à télécharger sur le même thème :
|