Dreamkey
29/02/2008, 17h27
Bonjour,
je voudrais créer un programme permettant de générer/extraire les fichiers 01-12.bmp et 13-27.bmp pour la PSP ; il permettrait de mettre des images de meilleurs qualités - voir ici pour plus d'explications (http://www.metagames-eu.com/forums/les-tutoriaux-psp/tuto-creer-un-01-12-bmp-contenant-plusieurs-fonds-d-crans-en-haute-r-solution-90351.html)
Pour l'instant je n'ai fait que la partie extraction, mais j'ai déjà un problème pour lire correctement le fichier .bmp ; j'ai essayé deux méthodes :
#include <stdio.h>
#include <stdlib.h>
#define img 6176
int main(int argc, char *argv[])
{
FILE* bmp=NULL;
char carac, nom[7], nomtemp[3];
int i, j=0;
char tab[7000];
bmp = fopen("or.bmp", "r");
if (bmp != NULL)
{
for (i=0 ; i<12 ; i++)
{
FILE* fichier = NULL;
itoa((i+1), nomtemp, 10);
if ((i+1)<10)
{
nom[0]='0';
nom[1]='\0';
strcat(nom, nomtemp);
}
else
strcpy(nom, nomtemp);
strcat(nom, ".bmp");
fichier = fopen(nom, "w");
//printf("Nom : %s ; debut : %i, ", nom, j);
//méthode 1 :
for (j=(i*img) ; j<((i+1)*img) ; j++)
{
carac=fgetc(bmp);
fputc(carac, fichier);
}
//méthode 2 :
printf("Position avant : %i\n", ftell(bmp));
printf("Lu : %i\n", fread(tab, sizeof(char), img, bmp));
fprintf(fichier, "%s", tab);
printf("Position apres : %i\n", ftell(bmp));
fclose(fichier);
printf("fin : %i\n", j);
printf("\n");
}
fclose(bmp);
}
return 0;
}
Avec la méthode 1, je n'arrive a extraire correctement que les 2 premiers bmp du 01-12.bmp, après pour le 3° bmp il me rajoute un caractère (0D en hexa), puis ça n'arrête pas de se décaler pour ne finir qu'avec des FF ; pour le 13-27.bmp, ce n'est que sur le dernier bmp qu'il me rajoute un 0D (à remarquer qu'il est aussi suivi d'un 0A).
Apparemment, dès qu'il rencontre un 0A, il va rajouter un 0D avant puis il va commencer à écrire n'importe quoi.
Avec la méthode 2, le "fprintf" s'arrête au premier 00 rencontré.
Est-ce que vous avez une autre solution ?
Merci.
je voudrais créer un programme permettant de générer/extraire les fichiers 01-12.bmp et 13-27.bmp pour la PSP ; il permettrait de mettre des images de meilleurs qualités - voir ici pour plus d'explications (http://www.metagames-eu.com/forums/les-tutoriaux-psp/tuto-creer-un-01-12-bmp-contenant-plusieurs-fonds-d-crans-en-haute-r-solution-90351.html)
Pour l'instant je n'ai fait que la partie extraction, mais j'ai déjà un problème pour lire correctement le fichier .bmp ; j'ai essayé deux méthodes :
#include <stdio.h>
#include <stdlib.h>
#define img 6176
int main(int argc, char *argv[])
{
FILE* bmp=NULL;
char carac, nom[7], nomtemp[3];
int i, j=0;
char tab[7000];
bmp = fopen("or.bmp", "r");
if (bmp != NULL)
{
for (i=0 ; i<12 ; i++)
{
FILE* fichier = NULL;
itoa((i+1), nomtemp, 10);
if ((i+1)<10)
{
nom[0]='0';
nom[1]='\0';
strcat(nom, nomtemp);
}
else
strcpy(nom, nomtemp);
strcat(nom, ".bmp");
fichier = fopen(nom, "w");
//printf("Nom : %s ; debut : %i, ", nom, j);
//méthode 1 :
for (j=(i*img) ; j<((i+1)*img) ; j++)
{
carac=fgetc(bmp);
fputc(carac, fichier);
}
//méthode 2 :
printf("Position avant : %i\n", ftell(bmp));
printf("Lu : %i\n", fread(tab, sizeof(char), img, bmp));
fprintf(fichier, "%s", tab);
printf("Position apres : %i\n", ftell(bmp));
fclose(fichier);
printf("fin : %i\n", j);
printf("\n");
}
fclose(bmp);
}
return 0;
}
Avec la méthode 1, je n'arrive a extraire correctement que les 2 premiers bmp du 01-12.bmp, après pour le 3° bmp il me rajoute un caractère (0D en hexa), puis ça n'arrête pas de se décaler pour ne finir qu'avec des FF ; pour le 13-27.bmp, ce n'est que sur le dernier bmp qu'il me rajoute un 0D (à remarquer qu'il est aussi suivi d'un 0A).
Apparemment, dès qu'il rencontre un 0A, il va rajouter un 0D avant puis il va commencer à écrire n'importe quoi.
Avec la méthode 2, le "fprintf" s'arrête au premier 00 rencontré.
Est-ce que vous avez une autre solution ?
Merci.