Page 1 sur 1

image en 256 couleurs

Publié : ven. 06/août/2004 15:16
par aurae
Impossible d'afficher à l'ecran une simple image 640*480 en 256 couleurs... elle semble s'afficher en 16 couleurs ?!

;**********

InitSprite():InitKeyboard():InitPalette()

OpenScreen(640,480,8,"mode256")

LoadImage(1 ,"sam.bmp")

LoadPalette(1,"sam.bmp")
DisplayPalette(1)

Repeat
FlipBuffers()

StartDrawing(ScreenOutput())
DrawImage(UseImage(1),0,0)
StopDrawing()

ExamineKeyboard()
Until KeyboardPushed(#pb_key_escape)
End

Si j'utilise un sprite à la place de l'image, il s'affiche bien en 256 couleurs...

;**********

InitSprite():InitKeyboard():InitPalette()

OpenScreen(640,400,8,"mode256")

LoadSprite(1,"sam.bmp")

LoadPalette(1,"sam.bmp")
DisplayPalette(1)

Repeat
FlipBuffers()

DisplaySprite(1,0,0)

ExamineKeyboard()
Until KeyboardPushed(#pb_key_escape)
End
:roll:

Publié : ven. 06/août/2004 15:19
par Le Soldat Inconnu
ton image de base est en 256 couleurs ou pas ?
il me semble que le format de l'image doit-être celui de l'écran pour ne pas avoir de problème

Publié : ven. 06/août/2004 16:09
par aurae
l'image est bien en 256 couleurs...

Publié : ven. 06/août/2004 16:28
par Oliv
Profondeur peut prendre les valeurs suivantes :
4: 16 couleurs, palettes indépendantes
8: 256 couleurs, palettes indépendantes
Ce n'aurait pas un rapport avec : palettes indépendantes ?

Publié : ven. 06/août/2004 16:46
par aurae
la palette est incluse dans le fichier Bmp.
Il me semble qu'il l'initialise correctement puisque si j'affiche mon image sous la forme d'un sprite celle-çi s'affiche en 256 couleurs !!!
Cela ne semble pas venir de la fonction palette mais du bloc:
Startdrawing, DrawImage, Stopdrawing.
Je comprends rien...
Je vais essayer de remplacer la fonction drawImage par une fonction equivalente en assembleur.
8O

Publié : ven. 06/août/2004 18:03
par Le Soldat Inconnu
pourquoi ne pas travailler en 32 bits, le 8bit n'est pas plus rapide, il est même plus lent il me semble car les cartes graphiques sont conçus pour travailler en 32bits

Publié : ven. 06/août/2004 18:56
par aurae
Je ne connais pas le fct des cartes graphiques, mais il n'est pas improbable qu'elle soient optimsées pour un mode 256 couleurs (pour les jeux), bien que le 32bits (64bits!!!!) doit être le mode le plus rapide.
Ceçi-dit,
si je suis en mode 32bits mais que mon image en mémoire est sur 8bits (les images sur 32, 24bits sont bcp trop "lourdes"), que fait la carte pour passer du 8 au 32 bits, combien de cycle d'horloge ça lui prend ???

Well,
j'ai remplacé la fonction DrawImage par l'equivalent en peek et en poke,
cela fonctionne.
Mais je ne sais pas si cela venait de cette fct ou de la fct LoadImage que j'ai supprimé ne sachant pas comment récuperer l'adresse à partir de cette celle-çi.

Comment donc récuperer l'adresse de l'image chargée avec LoadImage ?

Publié : ven. 06/août/2004 21:08
par Oliv
ipmageId() renvoi un identifiant, est-ce aussi l'adresse :?:

Publié : ven. 06/août/2004 22:12
par Dr. Dri
handle

Dri

Publié : sam. 07/août/2004 12:00
par aurae
j'ai remplacé la fct drawimage par de l'asm. Tout est ok.
A noter que l'image affichée est inversée. Cela est du au format bmp, il faudrait tout remettre dans l'ordre mais cela alourdissait le code et ce n'était pas l'objet de mon propos.

InitSprite():InitKeyboard():InitPalette()

; chargement image en memoire

ReadFile(0,"sam.bmp")
lg_fichier=Lof()
*pimg.l = AllocateMemory(lg_fichier)
FileSeek(690) ;Se positionne sur le raster image
ReadData(*pimg,lg_fichier)
CloseFile(0)

OpenScreen(640,400,8,"mode256")

LoadPalette(1,"sam.bmp")
DisplayPalette(1)

Repeat
FlipBuffers()

StartDrawing(ScreenOutput())

ecran.l=DrawingBuffer()

MOV esi,*pimg ;remplace DrawImage(UseImage(1),0,0)
MOV edi,ecran ;
MOV ecx,64000 ;
REP movsd ;

StopDrawing()

ExamineKeyboard()
Until KeyboardPushed(#pb_key_escape)
End

Publié : sam. 07/août/2004 17:33
par aurae
Petite correction à apporter :
lg_fichier=Lof()-690 ( au lieu de) lg_fichier=Lof()