begin process at 2012 05 27 20:21:05
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Graphique

 > LECTURE DE L'ENTÊTE D'UN FICHIER BMP [GCC]

LECTURE DE L'ENTÊTE D'UN FICHIER BMP [GCC]


 Information sur la source

Note :
7 / 10 - par 1 personne
7,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Graphique Niveau :Débutant Date de création :02/03/2004 Date de mise à jour :02/03/2004 20:56:56 Vu :7 424

Auteur : Funcky

Ecrire un message privé
Site perso
Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

 Description

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

  • /*
  • * 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);
  • }
/*
 * 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 ...


 Sources du même auteur

CONVERTIR UN NOMBRE BINAIRE EN DÉCIMAL ET INVERSEMENT
HEURE SUR AFFICHEUR 7 SEGMENTS [GCC]
Source avec Zip GESTION DE PACK
Source avec une capture CALCULATRICE
Source avec une capture PAC-MANIAK

 Sources de la même categorie

Source avec Zip Source avec une capture PLANNING D'EQUIPE par grephit
Source avec Zip APPLICATION DE DESSIN DE QUELQUES FIGURES par laguchori
Source avec Zip Source avec une capture HDR EXPOSURE FUSION par mecrosoft
Source avec Zip Source avec une capture IRC CLIENT MULTISERVEUR EN MFC (TXIRC) par TeniX
Source avec Zip ENTETE DU FICHIER BMP (BIPMAP) par k.Lutchi

Commentaires et avis

Commentaire de vlad_dracula le 24/05/2004 21:43:51

programme nickel, merci bcp

Commentaire de babas78 le 02/04/2005 00:03:28

Merci beaucoup pour ton code source il m'a été d'une très grande utilité.

Commentaire de Shad973 le 03/01/2008 18:03:31

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.

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,749 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales