Lecture de l'entête d'un fichier bmp [gcc]

Soyez le premier à donner votre avis sur cette source.

Snippet vu 11 928 fois - Téléchargée 28 fois

Contenu du snippet

Ce petit programme permet de lire l'entête d'un fichier bmp, mon but en faisant ce programme était de bien voir comment elle est structurée et quelles sont les données qui la compose.
On peut apprendre toute un série de choses sur un image avec ça. J'ai fait une fonction pour pouvoir le réutiliser dans d'autres programmes.

Source / Exemple :


/*

  • Code de Funcky (funcky@magellan.fpms.ac.be)
  • Dernière modification le 02/03/2004
  • /
#include <stdio.h> struct entete_struct { //structure (globale) ou seront stockées les infos de l'entete char signature[2]; int taille; int offset; int taille_entete; int largeur; int longueur; int plans; int bpp; int compression; int taille_image; int Hresolution; int Vresolution; int nbr_couleur; int nbr_couleur_importante; }entete; int hex2dec (unsigned char hex[4],int nombre) //Fonction permettant de convertir un nombre hexa { //en décimal (plus facile à lire) int resultat = 0; int i; for (i = nombre - 1; i >= 0; i--) { resultat = resultat * 256 + hex[i]; } return resultat; } void lire_fichier (char nom[255]) { unsigned char temp[4]; //Zone mémoire temporaire où on stoque ce qui est lu dans le fichier avant FILE * fichier; //de le traiter. fichier = fopen (nom,"r"); fread (&entete.signature,2,1,fichier); //signature codée sur 2 octets fread (&temp,4,1,fichier); entete.taille = hex2dec (temp,4); //taille totale du fichier, 4 octets fread (&temp,4,1,fichier); //reservé fread (&temp,4,1,fichier); //Offset de début de l'image, 4 octets entete.offset = hex2dec (temp,4); fread (&temp,4,1,fichier); //Taille de l'entete, 4 octets entete.taille_entete = hex2dec (temp,4); fread (&temp,4,1,fichier); //Largeur, 4 octets entete.largeur = hex2dec(temp,4); fread (&temp,4,1,fichier); //Longueur, 4 octets entete.longueur = hex2dec(temp,4); fread (&temp,2,1,fichier); //Nombre de plans ( 1 ), 2 octets entete.plans = hex2dec (temp,2); fread (&temp,2,1,fichier); //Nbre de bit par pixels, 2 octets entete.bpp = hex2dec (temp,2); fread (&temp,4,1,fichier); //Compression, 0 = rien, 4 octets entete.compression = hex2dec (temp,4); fread (&temp,4,1,fichier); //Taille de l'image, 4 octets entete.taille_image = hex2dec (temp,4); fread (&temp,4,1,fichier); //Resolution horizotale en pixels par mètre, 4octets entete.Hresolution = hex2dec (temp,4); fread (&temp,4,1,fichier); //Resolution verticale, en ixels par mètre, 4 octets entete.Vresolution = hex2dec (temp,4); fread (&temp,4,1,fichier); //Nombre de couleur utilisées, 0 = toutes, 4 octets entete.nbr_couleur = hex2dec (temp,4); fread (&temp,4,1,fichier); //Nombre de couleurs importantes, 0 = toues, 4 octets entete.nbr_couleur_importante = hex2dec (temp,4); //Si c'est un image 8 bit, cette entête est suivie de la palette. //Après la palette, ce sont les données de l'image fclose (fichier); } main () { lire_fichier ("test.bmp"); //remplacez ici par le fichier, ou par un scanf ;-) printf ("Signature : %s\n",entete.signature); printf ("Taille du fichier : %d\n",entete.taille); printf ("Offset de début de l'image : %d\n",entete.offset); printf ("Taille du Bitmap Info : %d\n",entete.taille_entete); printf ("Largeur : %d\n",entete.largeur); printf ("Longueur : %d\n",entete.longueur); printf ("Nombre de plans : %d\n",entete.plans); printf ("Bits par pixels : %d\n",entete.bpp); printf ("Schéma de compression : %d\n",entete.compression); printf ("Taille de l'image : %d\n",entete.taille_image); printf ("Résolution verticale : %d\n",entete.Vresolution); printf ("Résolution horizontale : %d\n",entete.Hresolution); printf ("Nombre de couleurs (0 = toutes) : %d\n",entete.nbr_couleur); printf ("Nombre de couleurs importantes (0 = toutes) : %d\n",entete.nbr_couleur_importante); }

Conclusion :


Ce code tout seul ne sert pas à grand chose, sauf pour montrer où se trouvent les informations du fichier. A utiliser dans un autre programme par exemple pour trier un répertoire d'images ...

A voir également

Ajouter un commentaire

Commentaires

vlad_dracula
Messages postés
10
Date d'inscription
dimanche 29 février 2004
Statut
Membre
Dernière intervention
29 mai 2004
-
programme nickel, merci bcp
babas78
Messages postés
1
Date d'inscription
lundi 1 mars 2004
Statut
Membre
Dernière intervention
2 avril 2005
-
Merci beaucoup pour ton code source il m'a été d'une très grande utilité.
Shad973
Messages postés
2
Date d'inscription
mercredi 7 février 2007
Statut
Membre
Dernière intervention
4 décembre 2007
-
Merci beaucoup pour ce code TRES facile a comprendre.
ce code ma fait avancer d'un grand pas pour mon projet "traitement d'image BMP" de fin de semestre. un grand Merci.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.