IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Lire un fichier BMP


Sujet :

C

  1. #1
    Membre confirmé
    Inscrit en
    Mai 2009
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 62
    Par défaut Lire un fichier BMP
    Bonjour/Bonsoir à tous,

    j'ai un petit problème lors de la lecture d'un fichier .bmp sous windows, voici mon code,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #pragma pack(push, 1)
     
    typedef unsigned char uc;
    typedef unsigned int ui;
    typedef unsigned short us;
     
    typedef struct
    {
        uc r;
        uc g;
        uc b;
        uc reserved;
    }Color;
    typedef struct
    {
        uc signature[2];
        ui leng;
        ui reserved;
        ui offset;
        ui taille;
        ui largeur;
        ui hauteur;
        us nplans;
        us nbits;
        ui compression;
        ui taille_img;
        ui Hres;
        ui Vres;
        ui ncolor;
        ui nimportantcolor;
        Color  palette;
    }BMP;
     
    void ShowTypes(void)
    {
        printf("int=%d Octes\n",sizeof(int));
        printf("unsigned int=%d Octes\n",sizeof(unsigned int));
        printf("char=%d Octes\n",sizeof(char));
        printf("unsigned char=%d Octes\n",sizeof(unsigned char));
        printf("short=%d Octes\n",sizeof(short));
        printf("unsigned short=%d Octes\n",sizeof(unsigned short));
        printf("long=%d Octes\n",sizeof(long));
        printf("unsigned long=%d Octes\n",sizeof(unsigned long));
        system("pause");
    }
    void ShowBMPInfo(BMP img)
    {
        printf("Entete du fichier\n");
        printf("------------------\n");
        printf("Signature du fichier: %c%c\n"\
               "Taille du fichier: %d Ko\n"\
               "Champ reserve: %d\n"\
               "Offset: %d\n\n",img.signature[0],img.signature[1],img.leng/1000,img.reserved,img.offset);
        printf("Entete de l'image\n");
        printf("------------------\n");
        printf("Largeur: %d\n"\
               "Hauteur: %d\n"\
               "Nombre de plans: %d\n"\
               "Nombre de bits: %d Bits\n"\
               "Type de compression: %d\n"\
               "Taille de l'image: %d Ko\n"\
               "Resolution Horizontale: %d\n"\
               "Resolution Verticale: %d\n"\
               "Nombre de couleur: %d\n"\
               "Nombre de couleurs importante: %d\n\n",img.largeur,img.hauteur,img.nplans,img.nbits,img.compression,img.taille_img/1000,img.Hres
               ,img.Vres,img.ncolor,img.nimportantcolor);
        printf("Entete de la palette\n");
        printf("------------------\n");
        printf("couleur R: %d\n"\
               "couleur G: %d\n"\
               "couleur B: %d\n"\
               "reserved: %d\n\n",img.palette.r,img.palette.g,img.palette.b,img.palette.reserved);
    }
     
    int main(int argc,char** argv)
    {
        FILE* fichier=NULL;
        FILE *f=NULL;
        ui i,j;
     
        BMP img;
        BMP *imgcpy=malloc(sizeof(BMP));;
        uc data[640][428]={{0}};
     
        fichier=fopen("image.bmp","rb");
        f=fopen("imagecpy.bmp","wb");
     
        if (fichier!=NULL)
        {
            fread(&img,sizeof(img),1,fichier);/*on lit les infos sur l'image*/
            memcpy(imgcpy,&img,sizeof(BMP));
            fread(data,sizeof(data),1,f);
            if (img.signature[0]=='B' && img.signature[1]=='M')
            {
                ShowBMPInfo(img);
                fwrite(imgcpy,sizeof(BMP),1,f); /* on enregistre les infos du header*/
                fwrite(data,sizeof(data),1,f);/* on enregistre les données iamges*/
            }
            else
            {
                printf("ce fichier n'est pas un fichier bmp\n");
            }
        }
        else printf("impossible d'ouvrir le fichier");
     
        getchar();
        fclose(fichier);
        fclose(f);
     
        (void)argc;
        (void)argv;
        return 0;
    }
    Donc le problème quand j'enregistre mon fichier BMP il m'enregistre 268Ko or le fichier d'origine fait 803Ko
    Merci d'avance

    EDIT: petite précision je sais j'ai déclaré un tableau statique mais c'est juste pour tester

    La structure que j'ai créer contient les informations sur l'entete du fichier et l'entete de l'image dans la fonction main uc data[640][428] correspond au données de l'image (l'image fait 640 de largeur et 428 de hauteur)

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Ben c'est un peu normal

    quand tu enregistres ton fichier, tu enregistres le header BMP et 1 seule fois les données. sizeof(uc) = 640*428=273920 octets.

    Il faudrait lire toutes les données de ton fichier (dans une boucle while) et les écrire toujours dans la même boucle.

    Autre chose,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        (void)argc;
        (void)argv;
    A la fin de ton main, c'est pour je suppose supprimer le warning parce que tu n'utilises pas ces paramètres, c'est très bien (cela veut au moins dire que ton compilateur est bien réglé).

    Essaye comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int main(int /*argc*/, char** /*argv*/)
    {
    ...
    C'est moins perturbant (je trouve) et cela a le même effet
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par ram-0000 Voir le message
    Essaye comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int main(int /*argc*/, char** /*argv*/)
    {
    ...
    C'est moins perturbant (je trouve) et cela a le même effet
    J'aurais plutôt dit de les supprimer soit
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  4. #4
    Membre émérite Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Par défaut
    Citation Envoyé par ram-0000 Voir le message
    Essaye comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int main(int /*argc*/, char** /*argv*/)
    {
    ...
    C'est moins perturbant (je trouve) et cela a le même effet
    C'est du C++ je suppose , en C tu peux faire tout simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int main( void )
    {
    ...

    Edit :
    Grillé, j'essaierais de taper plus vite à l'avenir.

  5. #5
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Citation Envoyé par Franck.H Voir le message
    J'aurais plutôt dit de les supprimer soit
    J'aime bien garder la forme avec argc et argv même si je ne les utilise pas et même si main(void) est autorisé.

    Et puis il y a d'autres cas (dans d'autres fonctions, pas forcemment avec main) où un des paramètres n'est pas utilisé, autant apprendre les bonnes pratiques.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  6. #6
    Membre confirmé
    Inscrit en
    Mai 2009
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 62
    Par défaut
    Merci bcp ça marche mais je remarque qu'il me manque 3 octets par rapport au fichier original n'empêche je peux lire l'image que j'ai copié,cependant j'ai une question:
    la première fois que j'ai testé j'ai fait comme ça
    while((fread(data,sizeof(data),1,fichier))!=0)
    {
    fwrite(data,sizeof(data),1,f);/* on enregistre les données iamges*/
    }
    ça n'as pas marché alors qu'avec celle-ci ça marche:
    while((fread(data,1,sizeof(data),fichier))!=0)
    {
    fwrite(data,1,sizeof(data),f);/* on enregistre les données iamges*/
    }
    Quelqu'un peux m'expliquer ça ?
    Merci d'avance

    EDIT: pour ce qui est des paramètres de la fonctions main merci, je préfère aussi laissé les paramètres au lieu d'un void

  7. #7
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while((fread(data,sizeof(data),1,fichier))!=0)
    Là, tu essayes de lire 1 bloc de 273920 octets, s'il n'en reste pas assez dans le fichier à lire, cela retourne 0 et il te manque la fin du fichier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while((fread(data,1,sizeof(data),fichier))!=0)
    Là, tu essayes de lire 273920 blocs de 1 octets, s'il n'en reste pas assez dans le fichier à lire, cela retourne le nombre de blocs lus (octets dans ton cas puisque taille=1) et tu peut compléter ton fichier.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  8. #8
    Membre confirmé
    Inscrit en
    Mai 2009
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 62
    Par défaut
    Merci beaucoup

  9. #9
    Membre confirmé
    Inscrit en
    Mai 2009
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 62
    Par défaut
    Resalut alors voila j'ai voulu améliorer un peux les choses,j'ai créer donc quelques fonctions et amélioré la structure BMP.
    Quand je lance mon programme(je vous poste le code d'ici quelques phrases ) alors première remarque il me bouffe 237MB de ram alors là surement c'est ma boucle fread dans la fonctions loadBMP qui est coupable .
    Deuxième chose lorsque je veux affichier les infos sur le fichier BMP il me sort des résultat n'importe quoi voici un exemple(affichage dans la console):
    Entete du fichier
    ------------------
    Signature du fichier: BM
    Taille du fichier: 0 Ko
    Champ reserve: 3538944
    Offset: 2621440

    Entete de l'image
    ------------------
    Largeur: 28049408
    Hauteur: 65536
    Nombre de plans: 24
    Nombre de bits: 0 Bits
    Type de compression: -1979711488
    Taille de l'image: 0 Ko
    Resolution Horizontale: 0
    Resolution Verticale: 0
    Nombre de couleur: 0
    Nombre de couleurs importante: 218103808

    Entete de la palette
    ------------------
    couleur R: 11
    couleur G: 17
    couleur B: 41
    reserved: 41
    ( est ce que c'est par rapport avec les "trous mémoires" ? je me suis assuré d'ajouté #pragma pack(push, 1) pour l'alignement de la mémoire
    voici le code complet:
    fichier main.c:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    #include <stdio.h>
    #include <stdlib.h>
    #include "bmp.h"
    #pragma pack(push, 1)
     
    int main(void)
    {
        BMP_Data* img=NULL;
     
        img=loadBMP("image.bmp");
        if(img!=NULL)
        {
          showBMPInfo(img->info);
        }
        else puts("et ben dommage pour toi");
     
        getchar();
     
        free(img);
        free(img->data);
     
        return 0;
    }
    fichier bmp.h:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    #ifndef BMP_H
    #define BMP_H
    typedef unsigned char uc;
    typedef unsigned int ui;
    typedef unsigned short us;
     
    typedef struct
    {
        uc r;
        uc g;
        uc b;
        uc reserved;
    }Color;
     
    typedef struct
    {
        uc signature[2];
        ui leng;
        ui reserved;
        ui offset;
        ui taille;
        ui largeur;
        ui hauteur;
        us nplans;
        us nbits;
        ui compression;
        ui taille_img;
        ui Hres;
        ui Vres;
        ui ncolor;
        ui nimportantcolor;
        Color  palette;
    }BMP_Header;
     
    typedef struct
    {
        BMP_Header info;
        uc **data;
    }BMP_Data;
     
    unsigned char** allocBMPData(unsigned int l,unsigned int h);
    void showBMPInfo(BMP_Header img);
    int isBMP(const unsigned char signature[2]);
    BMP_Data* loadBMP(const char* filename);
    #endif
    fichier bmp.c:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include "bmp.h"
     
    #pragma pack(push, 1)
     
    void showBMPInfo(BMP_Header img)
    {
        printf("Entete du fichier\n");
        printf("------------------\n");
        printf("Signature du fichier: %c%c\n"\
               "Taille du fichier: %d Ko\n"\
               "Champ reserve: %d\n"\
               "Offset: %d\n\n",img.signature[0],img.signature[1],img.leng/1000,img.reserved,img.offset);
        printf("Entete de l'image\n");
        printf("------------------\n");
        printf("Largeur: %d\n"\
               "Hauteur: %d\n"\
               "Nombre de plans: %d\n"\
               "Nombre de bits: %d Bits\n"\
               "Type de compression: %d\n"\
               "Taille de l'image: %d Ko\n"\
               "Resolution Horizontale: %d\n"\
               "Resolution Verticale: %d\n"\
               "Nombre de couleur: %d\n"\
               "Nombre de couleurs importante: %d\n\n",img.largeur,img.hauteur,img.nplans,img.nbits,img.compression,img.taille_img/1000,img.Hres
               ,img.Vres,img.ncolor,img.nimportantcolor);
        printf("Entete de la palette\n");
        printf("------------------\n");
        printf("couleur R: %d\n"\
               "couleur G: %d\n"\
               "couleur B: %d\n"\
               "reserved: %d\n\n",img.palette.r,img.palette.g,img.palette.b,img.palette.reserved);
    }
    unsigned char** allocBMPData(unsigned int l,unsigned int h)
    {
        uc **data;
        ui i;
     
        data=malloc(h*sizeof(unsigned char*));
        for (i=0;i<l;i++) data[i]=malloc(l*sizeof(char));
     
        return data;
    }
    int isBMP(const unsigned char signature[2])
    {
        if (signature[0]=='B' && signature[1]=='M') return 1;
        else return 0;
    }
     
    BMP_Data* loadBMP(const char* filename)
    {
        FILE* fbmp=NULL;
     
        BMP_Data *img=malloc(sizeof(BMP_Data));
     
        if (img==NULL) return NULL;
     
        memset(img,0,sizeof(BMP_Data));
     
        fbmp=fopen(filename,"rb");
        if (fbmp!=NULL)
        {
            fread(&img->info,1,sizeof(BMP_Header),fbmp);
            if (isBMP(img->info.signature))
            {
                img->data=allocBMPData(img->info.hauteur,img->info.largeur);
                if (img->data==NULL)
                {
                    free(img);
                    return NULL;
                }
                while ((fread(img->data,1,sizeof(img->data),fbmp))!=0);
            }
        }
        else
        {
            free(img);
            return NULL;
        }
     
        fclose(fbmp);
     
        return img;
    }
    Merci d'avance, et bien sur toutes remarques, la manière de faire etc... sont les biens venues

  10. #10
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Tu as collé ton pragma pack après la structure...

    De plus Microsoft recommande plus un pack(2) pour les structures BITMAPFILEHEADER et BITMAPINFOHEADER...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  11. #11
    Membre confirmé
    Inscrit en
    Mai 2009
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 62
    Par défaut
    Merci beaucoup ça règle les deux problèmes ,
    J'ai essayer de copier l'image d'origine que j'ai charger en mémoire, j'ai le même problème que tout à l'heure il m'enregistre 62Ko/803Ko, alors peut être je n'ai pas très bien compris comment charger les données:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    if (fbmp!=NULL)
        {
            fread(&img->info,1,sizeof(BMP_Header),fbmp);
            if (isBMP(img->info.signature))
            {
                img->data=allocBMPData(img->info.hauteur,img->info.largeur);
                if (img->data==NULL)
                {
                    free(img);
                    return NULL;
                }
                while ((fread(img->data,1,sizeof(img->data),fbmp))!=0);
            }
        }
    Ici je lis toutes les données sur l'image, pourquoi lors de l'enregistrement ça ne marche pas ?
    alors une autre chose que je voudrais savoir en plus je n'ai pas beaucoup d'expérience dans le traitement des images, par exemple si mon image fait 640x428 alors pourquoi je lis les données plusieurs fois avec fread?(avec une boucle) puisque je crée un tableau2d[640][428] donc j'enregistre tous les pixels de l'image ??
    voici mon nouveau code pour copier un fichier BMP:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    int main(void)
    {
        BMP_Data* img=NULL;
        BMP_Data* cpy=malloc(sizeof(BMP_Data));
        FILE *f=NULL;
        f=fopen("copie.bmp","wb");
        img=loadBMP("image.bmp");
        if (img!=NULL)
        {
            showBMPInfo(img->info);
            memcpy(cpy,img,sizeof(BMP_Data));
     
            fwrite(&cpy->info,1,sizeof(BMP_Header),f);
            fwrite(cpy->data,1,sizeof(cpy->data),f);
        }
        else puts("et ben dommage pour toi");
     
        getchar();
     
        free(img);
        free(img->data);
        fclose(f);
        return 0;
    }

  12. #12
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Heu dans l'autre sens la libération :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        free(img->data);
        free(img);
    Sinon, tu t'exposes à des désagréments, après free(img), le pointeur n'est plus valide donc img->data risque de ne plus être valide non plus
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  13. #13
    Membre confirmé
    Inscrit en
    Mai 2009
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 62
    Par défaut
    Oui tout a fait merci
    Sinon pour le chargement des données je fais comment ??

  14. #14
    Membre émérite Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Par défaut
    sizeof te donneras la taille qu'occupe le pointeur img->data voici une façon de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    (fread(img->data,1, img->info.hauteur * img->info.largeur ,fbmp);

Discussions similaires

  1. Lire et créer des fichiers BMP
    Par Ketchup666 dans le forum C++
    Réponses: 12
    Dernier message: 04/04/2007, 15h38
  2. Lire les fichiers BMP
    Par renovator dans le forum MFC
    Réponses: 1
    Dernier message: 05/07/2006, 15h17
  3. Lire le fichier du port série
    Par saibe dans le forum Linux
    Réponses: 7
    Dernier message: 09/04/2003, 09h29
  4. [TP]Charger un fichier bmp
    Par flavien tetart dans le forum Turbo Pascal
    Réponses: 5
    Dernier message: 30/06/2002, 19h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo