EDIT:ce problème découle en fait d'un autre problème, j'ai donc refait un nouveau post, merci de ne aps poster dans celui-ci
Bonjour à tous
Un post récent parlant de la création d'une fonction permettant de lire des .gif animés et de les convertir en SDL_Surface, je me suis lancé là-dedans.
Plutôt que de décoder moi-même chaque image GIF, j'ai décidé de contourner la difficulté en créant, pour chaque image, un fichier intermédiaire et à peu près valide (on verra ça plus tard ), que je fais décoder par IMG_Load().
Mon problème se situe au niveau de la lecture d'un fichier .gif tout simple, je ne sais pourquoi, mais à partir d'un certain octet (le 898e ici ) il me met tout le temps la même valeur : 0xE8 ... et je ne sais pas pourquoi.
En ouvrant le fichier avec un éditeur hexa-décimal, je me suis bien rendu compte que ce n'était pas les bonnes valeurs ensuite...
J'en appelle donc à votre aide. Voici mon code (ne faites gaffes ni à la structure, ni rien, ce sont surtout des tests ) :
main.cpp (pour l'instant, ça ne fait rien d'autre que d'appeler la fonction en question...)
#include <SDL/SDL.h> #include "GIF.h"
int main(int argc, char *argv[]) {
SDL_Surface** gif; int nbImages;
gif = lireGif("Balle.gif", nbImages);
if(gif == NULL) return1;
SDL_Init(SDL_INIT_VIDEO);
SDL_WM_SetCaption("Mon premier programme SDL !",NULL);
SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE|SDL_DOUBLEBUF);
reste += (char)(*cFichier); if(*cFichier == (unsignedchar)0x00 && (cFichier[1] == (unsignedchar)0xEB ||
cFichier[1] == (unsignedchar)0x2C)) { /* Pour les tests, je passe ce morceau... */ #if 0
reste += (char)0x3B;
nbImages++;
et ça continue comme ça jusqu'à la dernière ligne...
Voilà, bonne chance et bon courage à ceux qui voudront bien s'intéresser à ce problème, et quoi qu'il en soit, MERCI beaucoup à qui aura la patience nécessaire
EDIT: après quelques test, il s'avère que c'est le fichier qui est mal lu par fstream Je vais essayer avec la méthode C pour voir...
EDIT² : apparamment, la valeur 0xE8 lui pose vraiment problème, car en le codant façon C, avec une simple boucle while, je n'arrive pas à déterminer la taille correcte. Il s'arrête à l'octet contenant 0xE8 avec ce code:
while(fgetc(file) != EOF)
taille++;
Je ne comprends plus rien... Hilf mir !
EDIT3 : je poursuis mes tests et il se trouve qu'en fait, ce n'est pas cet octet qui pose problème, mais le suivant (899e ==> 0x1A) qui, lors de sa lecture, fait renvoyer à fgetc() la valeur EOF ...
EDIT 4 : quelques recherches plus tard, je découvre que ce caractère est appelé caractère SUB et j'ai trouvé quelqu'un qui a déjà eu le même problème d'interruption de la lecture du fichier....mais qui n'a pas reçu de réponse.
Je vais faire un 2e post pour recentrer le problème sur ce caractère...
Lecture d'un fichier
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.