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 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
|
#include <stdio.h>
#include <stdlib.h>
#pragma pack(push, 1)
typedef struct{
unsigned short type;
unsigned long size;
unsigned short reserved1;
unsigned short reserved2;
unsigned long offsetbits;
}bmpheader;
#pragma pack(pop)
typedef struct{
unsigned long headersize;
unsigned long width;
unsigned long height;
unsigned short planes;
unsigned short bitcount;
unsigned long compression;
unsigned long sizeimage;
unsigned long xpelspermeter;
unsigned long ypelspermeter;
unsigned long colorsused;
unsigned long colorsimportant;
}bmpinfo;
void readbmpheader(char *bitmapfilename)
{
FILE *bitmapfile;
bmpheader header;
bmpinfo info;
bitmapfile=fopen(bitmapfilename,"rb");
if(bitmapfile==NULL)
{
printf("Error when reading...!\n");
exit(-1);
}
fread(&header,sizeof(bmpheader),1,bitmapfile);
printf("Type de bitmap\n");
printf("%x\n",header.type);
printf("Taille de bitmap on octets:\n");
printf("%d\n",header.size);
printf("reserved1 :\n");
printf("%d\n",header.reserved1);
printf("reserved2 :\n");
printf("%d\n",header.reserved2);
printf("Data offset de la bitmap\n");
printf("%d\n",header.offsetbits);
fread(&info,sizeof(bmpinfo),1,bitmapfile);
printf("Taille de l'entete:\n");
printf("%d\n",info.headersize);
printf("Largeur de l'image:\n");
printf("%d\n",info.width);
printf("Hauteur de l'image:\n");
printf("%d\n",info.height);
printf("Nombre de planes:\n");
printf("%d\n",info.planes);
printf("Bits par pixels:\n");
printf("%d\n",info.bitcount);
printf("Mode de compression:\n");
printf("%d\n",info.compression);
printf("Taille de l'image:\n");
printf("%d\n",info.sizeimage);
printf("Xpelspermeter:\n");
printf("%d\n",info.xpelspermeter);
printf("Ypelspermeter:\n");
printf("%d\n",info.ypelspermeter);
printf("Couleur utilise:\n");
printf("%d\n",info.colorsused);
printf("Coleur importants:\n");
printf("%d\n",info.colorsimportant);
/*afficher tous les compsantes RGB des pixels*/
fseek(bitmapfile,header.offsetbits,SEEK_SET);
unsigned char red,green,blue;
for(int height=0;height<=info.height;height++)
{
for(int width=0;width<=info.width;width++)
{
fread(&red,sizeof(unsigned char),1,bitmapfile);
fread(&green,sizeof(unsigned char),1,bitmapfile);
fread(&blue,sizeof(unsigned char),1,bitmapfile);
printf("Pixel %s%d%s%d%s\n","[",height,",",width,"]");
printf("Rouge %d\n",red);
printf("Vert %d\n",green);
printf("Bleu %d\n",blue);
printf("\n");
}
}
/*et ça pour récupérer tous les pixels*/
fseek(bitmapfile,header.offsetbits,SEEK_SET);
unsigned char *pixels;
/* la taille du raster est la taille de la bitmap en octet moins
l'offset bits(qui est toujours 54 pour les bitmaps windows)
donc ça donne taille de raster=largeur*hauteur */
pixels=(unsigned char*)malloc(header.size-header.offsetbits);
fread(pixels,sizeof(unsigned char),header.size-header.offsetbits,bitmapfile);
free(pixels);
fclose(bitmapfile);
}
int main()
{
readbmpheader("\\Image.bmp");
getchar();
return 0;
} |
Partager