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
| #include <stdio.h>
#include <stdlib.h>
#include "constants.h"
typedef struct {
/* Entête du fichier */
unsigned char signature[2]; /* Signature sur 2 octets */
unsigned int fsize; /* Taille du fichier sur 4 octets */
unsigned int field; /* Champ réservé sur 4 octets */
unsigned int offset; /* Adresse de départ de l'image sur 4 octets */
/* Entête de l'image */
unsigned int hsize; /* Taille de l'entête de l'image sur 4 octets */
unsigned int width; /* Largeur de l'image sur 4 octets */
unsigned int height; /* Hauteur de l'image sur 4 octets */
unsigned int plane; /* Nombre de plan sur 2 octets */
unsigned int bits; /* Profondeur de codage de la couleur (nombres de bits) sur 2 octets */
unsigned int compression; /* Méthode de compression de l'image sur 4 octets */
unsigned int isize; /* Taille de l'image sur 4 octets */
unsigned int wresolution; /* Résolution horizontale sur 4 octets */
unsigned int hresolution; /* Resolution verticale sur 4 octets */
unsigned int cnumber; /* Nombre de couleurs de la palette sur 4 octets */
unsigned int icnumber; /* Nombre de couleurs importante de la palette sur 4 octets */
/* Palette de l'image */
/* Codage de l'image */
} BMP;
void BmpInfo(BMP bmp)
{
clrsrc();
printf("Information relative au fichier :\n\n");
printf("Type de fichier : ");
if(bmp.signature[0] == 'B' && bmp.signature[1] == 'M')
printf("Bitmap Windows\n");
else if(bmp.signature[0] == 'B' && bmp.signature[1] == 'A')
printf("Bitmap OS/2\n");
else if(bmp.signature[0] == 'C' && bmp.signature[1] == 'I')
printf("Icone couleur\n");
else if(bmp.signature[0] == 'C' && bmp.signature[1] == 'P')
printf("Pointeur de couleur\n");
else if(bmp.signature[0] == 'I' && bmp.signature[1] == 'C')
printf("Icone\n");
else if(bmp.signature[0] == 'P' && bmp.signature[1] == 'T')
printf("Pointeur\n");
printf("Taille du fichier : %u o\n", bmp.fsize);
printf("Champ réservé : %u\n", bmp.field);
printf("Offset : %u\n", bmp.offset);
printf("Entête de l'image : %u\n", bmp.hsize);
printf("Largeur de l'image : %u\n", bmp.width);
printf("Hauteur de l'image : %u\n", bmp.height);
printf("Nombre de plan : %u\n", bmp.plane);
printf("Nombre de bits : %u\n", bmp.bits);
printf("Type de compression : %u\n", bmp.compression);
printf("Taille de l'image : %u\n", bmp.isize);
printf("Résolution horizontale : %u\n", bmp.wresolution);
printf("Résolution verticale : %u\n", bmp.hresolution);
printf("Nombre de couleurs : %u\n", bmp.cnumber);
printf("Nombre de couleurs importante : %u\n", bmp.icnumber);
}
int main(void)
{
int i = 0;
FILE *image = NULL;
BMP bmp = {0};
image = fopen("image.bmp", "rb");
if(image != NULL)
{
fread(&bmp, sizeof(bmp), 1, image);
if((bmp.signature[0] == 'B' && bmp.signature[1] == 'M') || \
(bmp.signature[0] == 'B' && bmp.signature[1] == 'A') || \
(bmp.signature[0] == 'C' && bmp.signature[1] == 'I') || \
(bmp.signature[0] == 'C' && bmp.signature[1] == 'P') || \
(bmp.signature[0] == 'I' && bmp.signature[1] == 'C') || \
(bmp.signature[0] == 'P' && bmp.signature[1] == 'T'))
BmpInfo(bmp);
else
{
printf("Problème lors de la lecture du fichier\n");
printf("Le fichier ne semble pas correspondre au type de fichier demandé\n");
}
fclose(image);
}
else
{
printf("Unable to load image.bmp\n");
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
} |
Partager