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 :

Compression DCT sur une image bitmap


Sujet :

C

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 7
    Par défaut Compression DCT sur une image bitmap
    Bonsoir,Je suis etudiant en 2eme année ingenierie informatique.
    On m'a assigné un projet consistant à faire une compression en DCT sur une image .bmp.
    Ayant deja realisé la transformation DCT sur une matrice normale ,je bloque en essayant de charger un .bmp dans la memoire sous forme de matrice.


    Voici le code que j'ai fait juqu'a present :

    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
    #include <stdio.h>
     
    typedef struct BMP_FILE_FORMAT
    {
    char magic[2];
    }BMP_FILE_FORMAT;
    typedef struct BMP_FILE_HEADER
    {
    int  size;
    int  reserved0;
    int  reserved1;
    int  offset; //	the offset, i.e. starting address, of the byte where the bitmap data can be found.
    }BMP_FILE_HEADER;
    typedef struct BMP_DETAILED_INFO
    {
     
        int width;
        int height;
        int header_size;
        short n_planes;//the number of color planes being used. Must be set to 1.
        short bits_p_p;//the number of bits per pixel, which is the color depth of the image. Typical values are 1, 4, 8, 16, 24 and 32.
        int compress_type;
        int image_size;//	the image size. This is the size of the raw bitmap data (see below), and should not be confused with the file size.
        int h_res; //	the horizontal resolution of the image. (pixel per meter, signed integer)
        int v_res;
        int n_colors; //the number of colors in the color palette, or 0 to default to 2^n.
        int n_imp_colors;//	the number of important colors used, or 0 when every color is important; generally ignored.
    }BMP_DETAILED_INFO;
     
    void Chargement();
    BMP_FILE_FORMAT FORMAT;
    BMP_FILE_HEADER HEADER;
    BMP_DETAILED_INFO INFO;
    int main()
    {
        Chargement();
        return 0;
     
    }
     
    void Chargement()
    {
        FILE *f;
        //int K;
        f=fopen("imagedt.bmp","rb");
        fread(&FORMAT,sizeof(BMP_FILE_FORMAT),1,f);
        fread(&HEADER,sizeof(BMP_FILE_HEADER),1,f);
        fread(&INFO,sizeof(BMP_DETAILED_INFO),1,f);
     
        printf("--> Format de l'image : %c%c \n\n ",FORMAT.magic[0],FORMAT.magic[1]);
     
     
        printf("--> Taille du fichier : %d Octets\n\n",HEADER.size);
        printf("--> Offset            : %d\n\n",HEADER.offset);
     
     
        printf("--> Header size : %d \n\n",INFO.header_size);
        printf("--> Largeur : %d \n\n",INFO.width);
        printf("--> Hauteur : %d \n\n",INFO.height);
        printf("--> Taille d'image pure : %d \n\n",INFO.image_size);
     
        fclose(f);
     
     
        /*   K=sizeof(HEADER)+sizeof(FORMAT)+sizeof(INFO);
        printf("K= %d",K);*/
    }
    Questions :
    1 - Pourquoi apres compilation l'offset n'est pas egale a la taille totale des header :K ?
    2 - Afin de trouver les valeur constituant limage en memoire devrais je commencer par la valeur de K ou par celle de l'offset ?
    3 - Apres la lecture de la structure INFO avec fread les valeur sont decalé : size = hauteur , hauteur = largeur etc... A quoi est ce dû ?

    Merci d'avance pour votre aide

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Es-tu sûr de tes champs ?
    D'après wotsit.org (document Windows BMP Format (MS Word)) la structure BMP_FILE_HEADER est différente :
    File Size
    Reserved
    Offset
    Puis
    Bitmap Header Size
    Width
    Height
    Planes
    Bits Per Pixel
    ....

  3. #3
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Pourquoi n'inclus-tu pas directement Wingdi.h, qui définit entre autres BITMAPFILEHEADER et toutes les autres structures nécessaires à la manipulation d'un fichier BMP ?
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  4. #4
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 7
    Par défaut
    Pour les champs je les ai eu de wikipedia
    [ame]http://en.wikipedia.org/wiki/BMP_file_format[/ame]
    Je vais essayer de le faire en utilisant la bibliotheque wingdi.h Merci.
    Mais faudra bien le refaire rien qu'avec stdio.h

  5. #5
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Mais Wikipedia dit

    0002h 4 bytes the size of the BMP file in bytes
    0006h 2 bytes reserved; actual value depends on the application that creates the image
    0008h 2 bytes reserved; actual value depends on the application that creates the image
    000Ah 4 bytes the offset, i.e. starting address, of the byte where the bitmap data can be found.
    Mais toi tes "réservés" font 4 bytes (si tes int font 4 bytes) et non pas 2 et tu réserves 8 bytes au total.

    Dans la source que j'ai citée, il y avait aussi une zone réservée de 4 bytes.

  6. #6
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Citation Envoyé par Supr3M Voir le message
    Mais faudra bien le refaire rien qu'avec stdio.h
    Pourquoi donc ??? Au pire, tu recopies les déclarations de structures de cet entête, car au moins, tu sais qu'elles sont exactes...
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  7. #7
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 7
    Par défaut
    ReBonsoir
    @diogene Merci ! c'est plus clair maintenant,
    @Mac_LAK C'est donc ce que je vais faire,
    utilisé les en têtes de wingdi.h car je ne peux pas la déclarer sachant que le cahier de charge de mon projet m'y oblige.

  8. #8
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 7
    Par défaut
    Voila donc tout marche pour le mieux mais je ne sais toujours pas comment lire la matrice de l'image !

  9. #9
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    C'est organisé en lignes, de bas en haut, de mémoire avec un alignement sur 32 bits au niveau de la longueur des lignes.
    Exemple : 8 BPP + image en 250x200 = 200 lignes de 250 pixels, arrondis à 63 mots (=252 octets) par ligne.
    Bien entendu, sur des images à 32 BPP, tu n'as plus le problème d'alignement car il est naturellement satisfait.

    Une fois les bonnes informations extraites de l'entête, tu peux te contenter d'une bonne grosse lecture bourrine dans un tableau, s'il est correctement alloué. Il faudra soit penser à travailler en inverse sur la coordonnée Y, soit renverser l'image après lecture, soit lire ligne à ligne en partant du bas, à ta convenance.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

Discussions similaires

  1. Réponses: 6
    Dernier message: 15/11/2007, 12h31
  2. Capturer un event sur une image bitmap
    Par LordSpartacus dans le forum wxPython
    Réponses: 1
    Dernier message: 04/11/2007, 22h33
  3. Comment mettre un label sur une image
    Par dug dans le forum MFC
    Réponses: 3
    Dernier message: 07/04/2004, 10h40
  4. generer une image bitmap a partir d'une scene OGL
    Par FreshLog dans le forum OpenGL
    Réponses: 4
    Dernier message: 01/07/2003, 11h29
  5. Lecture d'une image bitmap
    Par Geronimo dans le forum x86 32-bits / 64-bits
    Réponses: 18
    Dernier message: 28/06/2002, 12h01

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