Improper call to JPEG library

Fermé
Sri Lumpa Messages postés 177 Date d'inscription mercredi 14 novembre 2007 Statut Membre Dernière intervention 1 juin 2010 - 22 mai 2008 à 16:41
 MarkZ3 - 22 nov. 2008 à 20:06
Bonjour,

Je dois réaliser un petit module en C permettant de lire une image JPEG, d'y appliquer certaines modifications puis de la ré-enregistrer. Problème, lors de la lecture du fichier, une erreur apparaît : "Improper call to JPEG library in state 202". Quelqu'un saurait-il ce que ce code erreur "202" signifie ? J'ai passé une bonne partie de l'aprem' à chercher sur Google sans rien trouver.

Je laisse la partie du code qui plante :

int main(int argc, char* argv[])
{
	unsigned char *image_origine, *image_renverse, *ligne;
	
	struct jpeg_decompress_struct cinfo;
	struct jpeg_compress_struct cout;
	struct jpeg_error_mgr jerr;
	FILE *file;
	char *out_file;
		
	unsigned char *p1, *p2;
	int x, y, i, j, x_max, y_max, images_traitees;
	if(argc < 2){
		printf("<use> : renversement img1.jpg...");
		return 0;
	}
	
	images_traitees = 0;
	
	printf("Debut du traitement sur %d image(s)\n", argc-1);
	for(i=1 ; i<argc ; i++){
		//Ouverture du fichier jpg
		if((file = fopen(argv[i], "r")) == NULL){
			fprintf(stderr, "Erreur dans l'ouverture du fichier %s\n", argv[i]);
			perror("fopen");
			continue;
		}
		
		printf("Traitement de l'image %s\n", argv[i]);
		cinfo.err = jpeg_std_error(&jerr);
		jpeg_create_decompress(&cinfo);
		
		// Lecture de l'image
		jpeg_stdio_src(&cinfo, file);
		jpeg_read_header(&cinfo, TRUE);
				
		// Récupération de la largeur et hauteur
		x_max = cinfo.image_width;
		y_max = cinfo.image_height;
		printf("\nTaille de l'image : %dx%d\n", x_max, y_max);
		
		// Allocation de la mémoire pour les images
		image_origine = (unsigned char*)malloc(x_max*y_max*sizeof(unsigned int));
		image_renverse = (unsigned char*)malloc(x_max*y_max*sizeof(unsigned int));
		
		// Chargement des pixels de l'image originelle
		ligne = image_origine;
		printf("\nDébut de lecture de l'image\n");
		while(cinfo.output_scanline < y_max){
			printf("ligne en cours ... %d\n", cinfo.output_scanline);
			ligne = image_origine+3*x_max*cinfo.output_scanline;
			jpeg_read_scanlines(&cinfo, &ligne, 1);
		}
		printf("Lecture de l'image terminée\n");
     .......
     .......
}


L'erreur semble apparaître au moment où il attaque la lecture de l'image elle-même : il m'affiche bien les dimensions de l'image mais il ne semble pas être capable de lire la première ligne de l'image. L'erreur semble se produire au niveau de la ligne soulignée.

Si quelqu'un sait comment me dépanner ce serait sympa.
A voir également:

1 réponse

je pense qu'il manque
jpeg_start_decompress(&cinfo);

avant la lecture.
0