Aller au contenu

Change
Photo

Exercice C


  • Veuillez vous connecter pour répondre
3 réponses à ce sujet

#1
NNNNBOT

NNNNBOT

    En transit

  • Membre
  • 110 messages
  • LocalisationTroyes
Bonjour à tous,

Je suis en plein travail sur un programme la et j'ai quelque difficultés..
Je dois ouvrir une image.bmp, lire les données de l'entête et afficher à l'écran ses données.
J'ai déjà fait le main.c et le .h, il me reste donc plus normalement qu'à codé le .c.

Le main.c
#include <stdio.h>
#include <stdlib.h>

#include "formatbmp.h"


/*
 Il n'y a rien à faire ici
*/
void affichageAide(void)
{
    printf("************************************************************\n");
    printf("* SYNTAXE:    ./a.out <fichier-in.bmp> <fichier-out.bmp>   *\n");
    printf("*    affiche les caracteristiques du fichier               *\n");
    printf("*    et bascule le noir vers blanc ou blanc vers noir      *\n");
    printf("************************************************************\n");
}


/*
 Il n'y a rien à faire ici
*/
int main(int argc, char *argv[])
{
struct enteteBMP head;   // pour memoriser l'entete
BYTE *palette=NULL;      // pour memoriser la palette de couleurs

    //test des arguments de la ligne de commande
    if(argc != 3) {
        affichageAide();
        return(1);
    }
   


    // chargement de l'entete et de la palette de couleurs    
    if(!(palette=chargerEntete(argv[1],&head))) {
        printf("PB de lecture entete");
        return(1);
    }
    afficherEntete(&head);
    


    return(0);
}

//FIN DU MAIN
Le formatbmp.h
#ifndef FORMATBMP_H
#define FORMATBMP_H

/*
 * Définitons pour le format du fichier bmp
 */
#define BYTE  char      //les donnees image et palette sont sur un octet.
#define NOIR  (BYTE)0
#define BLANC (BYTE)255



struct enteteBMP {
    // entete fichier
    //char signature[2]; 
        /*
        * ne pas faire apparaitre le champ signature[2]
        * car pb de décalage (sizeof(struct) non multiple de 4)
        * il faut donc recuperer ces deux octets a part 
        * dans la fonction chargerEntete()
        */
    int tailleFichier;
    int reserve;
    int offsetData;
    
    //entete image
    int tailleEnteteImage;
    int largeur;
    int hauteur;
    short nbPlan;
    short profondeur;
    int compression;
    int tailleImage;
    int resolutionHorizontale;
    int resolutionVerticale;
    int nbCouleur;
    int CouleurImp;
};




/*
 * les prototypes
 */
// codes d'erreurs en sortie des fonctions
#define PB  0
#define OK  1
BYTE*  chargerEntete(char *,struct enteteBMP *);
void   afficherEntete(struct enteteBMP *);


#endif /* FORMATBMP_H */
Et voici la partie du code qu'il me manque.. sur le formatbmp.c
#include <stdio.h>
#include <stdlib.h>

#include "formatbmp.h"


/*
 * charge l'entete du fichier dans head
 * charge la palette de couleurs dans une zone mémoire allouée par malloc
 * Retourne l'adresse de palette si l'operation se deroule normalement, NULL sinon.
 * 1 Ouvre fichier-in.bmp,
 * 2 charge dans enteteBMP les donnes,
 * 3 alloue memoire pour palette,
 * 4 charge entete
 * 5 retourne l'adresse de palette
 */
BYTE* chargerEntete(char *nomFichier,struct enteteBMP *head)
{

    // *************** COMPLETER ICI *********************
    // Il y a une ou des variables manquantes...
char signature[2];
int  taillepalette;
BYTE *palette;




    // *************** COMPLETER ICI *********************
    // 
    // Choisir et justifier le mode d'ouverture du fichier
    // JUSTIFICATION : 
    fichier=fopen(nomFichier, MODE_A_CHOISIR );       
    if(!fichier)
    {
        printf("probleme ouverture du fichier\n");
        return(NULL);
    }





    // RIEN A FAIRE ICI
    // verifier la nature du fichier
    fscanf(fichier,"%c",&signature[0]);
    fscanf(fichier,"%c",&signature[1]);
    if(signature[0]!='B' || signature[1]!='M')
    {
        printf("fichier non BMP\n");
        return(NULL);
    }
    




    // *************** COMPLETER ICI *********************
    // lecture de lecture de l'entete du fichier
    //
    // lire l'entete EN UNE SEULE INSTRUCTION






    // on recupère la taille de la palette
    taillepalette=head->offsetData - sizeof(struct enteteBMP)-2;

    // *************** COMPLETER ICI *********************
    // allocation memoire
    // lire la palette dans le fichier





    // RIEN A FAIRE ICI
    fclose(fichier);
    return(palette);
}



// à compléter ICI
/*
 * Affiche à l'ecran les donnees de l'entete
 */
void afficherEntete(struct enteteBMP *head)
{
    printf("Description du fichier bmp\n\n");
    printf("==== entete fichier ====\n");

    // entete fichier
    printf( //...
    
    printf("==== entete image ====\n");
    //entete image
    printf( //...

}


// FIN DU FICHIER
Donc si vous avez des idées n'hésitez surtout pas :D
Merci
  • 0
SFF4GAMERS: E7500@2,93GHz / Asus P5N-D / 250GTS / 4Go RAM / Raid0 F3 500gb@7200 Tr/min

#2
naldir

naldir

    En attente de Visa

  • Membre
  • 8 messages
salut,
fichier=fopen(nomFichier,"r+");
mode r+ car on a besoin de lire mais pour plus tard (si t'as besoin d'écrire pour remplacer les couleurs etc..

Modifié par naldir, 13 février 2012 - 15:35.

  • 0
pc portable: asus republic of gamer G53SX
http://rog.asus.com/.../15-inch/g53sx/
telephone portable: samsung galaxy S2

#3
Arkh

Arkh

    Geek diplomé

  • Membre
  • 2 259 messages
J'ai pas compris ta question... c'est quoi le problème?

http://www.fileforma.../bmp/corion.htm
http://en.wikipedia....BMP_file_format
  • 0

D900F : I7 950 (8x3.1Ghz) /// 6GB DDR3 1333MHz (3x2Go) /// GTX 280M (128CC/1GHz/1Go) /// 2x320GB 7200Trs/min /// WUXGA Non-Glare Screen 1920x1200 /// Razer Abyssus /// NC-2000 /// By PcSystems-EvolutionX /// Powered by Debian!

> Get Process Explorer


#4
Yo Eight

Yo Eight

    Admin du Code

  • Membre
  • 4 218 messages
  • Localisationdans les environs de Paris
@NNNNBOT

T'as cherché combien de temps ?
  • 0
Mon blog: Deikonad - Functional Programming
iMac 27" : Core i7 860 @ 2,8 GHz - ATI 4850M - 8Go @ 1066MHz - 1To @ 7200trs/min
MacBook Pro 15" : Core i7 2635QM @ 2GHz - ATI 6490M - 8Go @ 1333MHz - 500Go @ 5400trs/min
MacBook Pro 13" : Core 2 Duo P8400 @ 2,26GHz - nVidia 9400M - 2Go @ 800MHz - 160Go @ 5400trs/min




0 utilisateur(s) li(sen)t ce sujet

0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)