Afficher bitmap 256 couleurs

Résolu
cs_mat74 Messages postés 241 Date d'inscription dimanche 10 août 2003 Statut Membre Dernière intervention 16 juin 2010 - 31 août 2004 à 23:26
cs_mat74 Messages postés 241 Date d'inscription dimanche 10 août 2003 Statut Membre Dernière intervention 16 juin 2010 - 4 sept. 2004 à 12:53
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
@+

36 réponses

Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
2 sept. 2004 à 18:45
ok c'est bien dans l'ordre Rouge, Vert, Bleu mais seuls les 6 bits inférieurs sont pris en compte.
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
2 sept. 2004 à 19:08
Il existait un moyen de passer en 8 bits sur les cartes vidéo performantes mais je sais plus lequel.
en attendant tu peux diviser par 4 pour obtenir une valeur approchée de couleur.
0
cs_mat74 Messages postés 241 Date d'inscription dimanche 10 août 2003 Statut Membre Dernière intervention 16 juin 2010
2 sept. 2004 à 20:40
donc tu pense que si j'utilise la fonction 00h pr mettre la palette en 8 bits sa marchera ?
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
2 sept. 2004 à 20:52
hum! pas si simple. faut d'abord appeler la fonction 0 pour voir si VESA est supporté. voir si le bit 0 dans les Performances est à 1 et là t'as des chances.
mais j'ai bien peur qu'il faille passer par un mode VESA
va voir ici:
http://www.progzone.free.fr/graphisme/modesvesa/modesvesa.html
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_mat74 Messages postés 241 Date d'inscription dimanche 10 août 2003 Statut Membre Dernière intervention 16 juin 2010
2 sept. 2004 à 21:32
je vais essayer avec tes fonctions . jte dirais si sa marche .
sa me dit pas trop de me mettre au VESA sa a l'air assez compliquer a gerer .
pr ce qui est de mon image jpense que cest mon programme parce que j'ai trouver un prog qui affiche une image et qui marche nickel et j'ai essayer d'afficher la mm image et moi sa marche pas . le pb c'est que je comprend rien au prog parce quil a pas mis de commentaire
donc je te met le code et peut etre qd le comparant au mien tu verra ce qui va pas
jte precise que le prog de ce gas est un com et moi c'est un exe
merci
0
cs_mat74 Messages postés 241 Date d'inscription dimanche 10 août 2003 Statut Membre Dernière intervention 16 juin 2010
2 sept. 2004 à 21:34
voila le code


<.model tiny
.486
smart
.code

org 0100h

start:
;jmp pope
; demarrer le mode graphique
mov ax,0013h
int 10h
; ouvrir le fichier 'dessin.bmp'
mov ax,3d00h
mov dx,offset names
int 21h
; le handle ds bx
mov bx,ax
; le handle ds bp
mov bp,ax
; on se place au debut de la palette
mov ax,4200h
xor cx,cx
mov dx,36h
int 21h
; resize mem bloc
mov ah,4ah
mov bx,65536/16
int 21h
; allocate mem
mov ah,48h
mov bx,65536/16
int 21h
; ret ax segment of allocate bloc
mov bx,bp
mov ds,ax
push ax
pop fs
; lire 1024 octets
mov ah,3fh
xor dx,dx
mov cx,1024
int 21h

mov di,1024+1
xor si,si
mov cl, 0ffh
; envoie la palette du bmp a lecran
paletteload:
; charge ds al le byte ds:si
lodsb
shr al, 2
mov [di+2], al
lodsb
shr al, 2
mov [di+1], al
lodsb
shr al, 2
mov [di+0], al
inc si
add di, 3
dec cl
jnz paletteload

mov si,1024+1
mov dx, 3c8h
cld
mov cl, 0ffh
xor bx, bx

palettemake:
mov al, bl
out dx, al
inc dx
lodsb
out dx, al
lodsb
out dx, al
lodsb
out dx, al
dec dx
inc bl
dec cl
jnz palettemake

mov bx,bp
mov ax,4200h
mov dx,0436h
xor cx,cx
int 21h
; lire fichier
mov ah,3fh
mov cx,0ffffh
xor dx,dx
int 21h
; ferme le fichier
mov ah,3eh
int 21h

;pope:
mov cx,7070h
mov ax,0000h
add al,cl
mov bl,ah
xor bh,bh
xor ah,ah
mov dx,ax
shl ax,6
shl dx,8
add ax,dx
add bx,ax
mov di,bx
mov ax,0A000H
mov es,ax
xor si,si

boucle:
lodsb
stosb
dec cl
jnz boucle

mov cl,70h
sub bx,320
mov di,bx
dec ch
jnz boucle

mov ax,00
int 16h
mov ax,0003
int 10h
ret

names db 'dessin.bmp',0
handlebmp dw 0
end start



juste c'est moi qu'est rajouter les commentaire pr mieu comprendre dc cest possible que sa soit faux
0
cs_mat74 Messages postés 241 Date d'inscription dimanche 10 août 2003 Statut Membre Dernière intervention 16 juin 2010
2 sept. 2004 à 22:24
c'est bon cette fois c'est fini tt marche impect .
en fait il m'a suffit de faire

[code]

mov AX, 4F08h
mov BL, 00h
mov BH, 8
int 10h

/code

et comme par magie tte les couleurs ont apparus exactement au bonne endrois sans petite mer** sur les bord
tt est nickel

c'est + la peine de chercher

merci @+
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
2 sept. 2004 à 22:25
Bon j'ai étudié le programme. Il ya rien de plus que toi.
toujours affichage en 262144 couleurs.
son image fait 112x112
un calcul de bx (addresse vidéo) de 112 multiplié par 320.
faut pas oublier la ligne zéro, il faudrait faire 111 * 320 pour être exact.
pour la palette:
une première passe pour mettre le Rouge avant [di+2] avec division par 4 (shr al,2) ... inc si
une deuxième passe pour mettre dans le registre DAC, cette fois ci elle sont déjà inversées et divisées par 4 ... add di,3 suffit
des trucs qui servent à rien:
mov bx,bp push ax pop fs

conclusion: comme j'ai dit plus haut, il a divisé les couleurs par 4,
le 255 passe en 63 mais reste blanc.

je vois qu'il y a un message alors j'envois !
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
2 sept. 2004 à 22:26
ben si t'as réussi à faire les 8 bits c'est impeccable.
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
2 sept. 2004 à 22:28
Bravo

0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
3 sept. 2004 à 18:06
Peut tu valider une réponse s'il te plait, même la tienne si tu veux.
d'autre part pour que ton code soit portable, il faut que tu passes par la fonction 0 pour savoir si VESA est implanté et si ta carte supporte l'extension à 8 bits. ce qui n'est pas vrai pour tout le monde.
0
cs_mat74 Messages postés 241 Date d'inscription dimanche 10 août 2003 Statut Membre Dernière intervention 16 juin 2010
3 sept. 2004 à 22:36
comment sa valider une reponse ?
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
4 sept. 2004 à 01:52
Je voulais dire tout simplement presser le bouton "réponse acceptée" à côté de la réponse si celle-ci a répondu à votre attente.
0
cs_mat74 Messages postés 241 Date d'inscription dimanche 10 août 2003 Statut Membre Dernière intervention 16 juin 2010
4 sept. 2004 à 07:07
et sa sert a quoi ? apres sa met resolus ds le titre ?
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
4 sept. 2004 à 11:47
voila ce que dit le site à ce sujet:
- "... Cela aidera d'autres visiteurs à trouver des réponses à leur problème ..."
ça veut dire que si la réponse n'a pas été marquée comme résolue, ils risquent de passer à côté et de ne pas regarder.
mais si tu veux pas c'est pas grave.
0
cs_mat74 Messages postés 241 Date d'inscription dimanche 10 août 2003 Statut Membre Dernière intervention 16 juin 2010
4 sept. 2004 à 12:53
j'm'minformais juste
0
Rejoignez-nous