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)

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é 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


Nos sponsors

Sondage...

CalendriCode

Novembre 2008
LMMJVSD
     12
3456789
10111213141516
17181920212223
24252627282930

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, 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
Temps d'éxécution de la page : 0,312 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.