Problème avec fread()

Résolu/Fermé
SayanDash - 5 juil. 2013 à 14:08
 SayanDash - 5 juil. 2013 à 14:45
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ù:

    /************************/
        /* 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

[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
Modifié par [Dal] le 5/07/2013 à 14:40
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
0
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.
0