image en 256 couleurs

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
aurae
Messages : 12
Inscription : ven. 06/août/2004 15:02

image en 256 couleurs

Message 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:
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message 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
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
aurae
Messages : 12
Inscription : ven. 06/août/2004 15:02

Message par aurae »

l'image est bien en 256 couleurs...
Oliv
Messages : 2117
Inscription : mer. 21/janv./2004 18:39

Message 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 ?
aurae
Messages : 12
Inscription : ven. 06/août/2004 15:02

Message 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
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message 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
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
aurae
Messages : 12
Inscription : ven. 06/août/2004 15:02

Message 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 ?
Oliv
Messages : 2117
Inscription : mer. 21/janv./2004 18:39

Message par Oliv »

ipmageId() renvoi un identifiant, est-ce aussi l'adresse :?:
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

handle

Dri
aurae
Messages : 12
Inscription : ven. 06/août/2004 15:02

Message 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
aurae
Messages : 12
Inscription : ven. 06/août/2004 15:02

Message par aurae »

Petite correction à apporter :
lg_fichier=Lof()-690 ( au lieu de) lg_fichier=Lof()
Répondre