Problème avec fread()
Résolu
SayanDash
-
SayanDash -
SayanDash -
Bonjour,
Je suis en train de réaliser un petit programme qui créé un fichier binaire (bitmap ici mais je ne respecte l'architecture car je vais créer mon propre fichier) avec une entête et la valeur de chaque pixel de l'image (nuances de gris donc 1 octet par pixel). Jusque là tout va bien, à l'aide d'un logiciel j'ai constaté que le fichier contenait correctement les informations que je veux.
Par contre, je veux le lire ensuite. Et là, quand je récupère mes pixels avec un fread(), je n'en ai que 8176 sur 10000 (image 100*100px). Je cherche depuis pas mal de temps mais je ne comprends vraiment pas d'où cela peut provenir. Merci d'avance de votre aide.
Voici le code au cas où:
Je suis en train de réaliser un petit programme qui créé un fichier binaire (bitmap ici mais je ne respecte l'architecture car je vais créer mon propre fichier) avec une entête et la valeur de chaque pixel de l'image (nuances de gris donc 1 octet par pixel). Jusque là tout va bien, à l'aide d'un logiciel j'ai constaté que le fichier contenait correctement les informations que je veux.
Par contre, je veux le lire ensuite. Et là, quand je récupère mes pixels avec un fread(), je n'en ai que 8176 sur 10000 (image 100*100px). Je cherche depuis pas mal de temps mais je ne comprends vraiment pas d'où cela peut provenir. Merci d'avance de votre aide.
Voici le code au cas où:
/************************/ /* Create bitmap */ /************************/ t_header header; int width = 100; int height = 100; FILE* f = fopen("test.bmp","wb"); // Initialisation du header du fichier header.offset = 16 ; header.taille = 16 + width*height; header.width = width; header.height = height; fwrite(&header, sizeof(t_header), 1, f); char* pixel = (char*) malloc(sizeof(char)*width*height); int x; for(x=0 ; x<width*height ; x++ ){ if(x%3==0) pixel[x] = 0; if(x%3==1) pixel[x] = 127; if(x%3==2) pixel[x] = 255; } fwrite(pixel, sizeof(char), width*height, f); /************************/ /************************/ /* Read Bitmap */ /************************/ // Lecture de l'image FILE * rf = fopen("test.bmp", "rb"); // Creation de l'header t_header h2; // Lecture du header fread(&h2, sizeof(t_header), 1, rf); char* pixel2 = (char*) malloc(sizeof(char)*width*height); //**** Ici, je ne lis que 8176 caractère **** size_t len = fread(pixel2, sizeof(char), width*height, rf); printf("%d",len); //fread(pixel2, sizeof(char), width*height, rf); /************************/
1 réponse
Salut SayanDash,
Tu devrais fermer ton fichier avec fclose avant de l'ouvrir, ou au moins faire un fflush si tu dois le garder ouvert, pour être sur que les données pouvant rester dans le tampon d'écriture sont bien écrites pour le flux d'écriture avant de tenter de lire.
http://www.cplusplus.com/reference/cstdio/fflush/
http://www.cplusplus.com/reference/cstdio/fclose/
Dal
Tu devrais fermer ton fichier avec fclose avant de l'ouvrir, ou au moins faire un fflush si tu dois le garder ouvert, pour être sur que les données pouvant rester dans le tampon d'écriture sont bien écrites pour le flux d'écriture avant de tenter de lire.
http://www.cplusplus.com/reference/cstdio/fflush/
http://www.cplusplus.com/reference/cstdio/fclose/
Dal
SayanDash
Ah nickel, ça marche. J'avais mis des fclose() mais à force de retoucher mon code je les ai virés. Merci beaucoup en tout cas, je vais pouvoir avancer.