begin process at 2012 05 25 01:58:41
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Assembleur

 > 

Archives

 > 

Newbii

 > 

afficher bitmap 256 couleurs


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

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


1 2 3 4

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


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,076 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales