[代码片段]读取BMP文件(二)

 

 

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 #pragma pack(2)
 5 
 6 /*定义WORD为两个字节的类型*/
 7 typedef unsigned short WORD;
 8 /*定义DWORD为e四个字节的类型*/
 9 typedef unsigned long DWORD;
10 
11 /*位图文件头*/
12 typedef struct BMP_FILE_HEADER
13 {
14     WORD bType;             /*  文件标识符          */
15     DWORD bSize;            /*  文件的大小          */
16     WORD bReserved1;        /*  保留值,必须设置为0  */       
17     WORD bReserved2;        /*  保留值,必须设置为0  */
18     DWORD bOffset;          /*  文件头的最后到图像数据位开始的偏移量    */
19 } BMPFILEHEADER;
20 
21 /*位图信息头*/
22 typedef struct BMP_INFO
23 {
24     DWORD bInfoSize;       /*  信息头的大小             */
25     DWORD bWidth;          /*  图像的宽度               */
26     DWORD bHeight;         /*  图像的高度               */
27     WORD bPlanes;          /*  图像的位面数             */
28     WORD bBitCount;        /*  每个像素的位数           */
29     DWORD bCompression;    /*  压缩类型                 */
30     DWORD bmpImageSize;    /*  图像的大小,以字节为单位  */
31     DWORD bXPelsPerMeter;  /*  水平分辨率               */
32     DWORD bYPelsPerMeter;  /*  垂直分辨率               */
33     DWORD bClrUsed;        /*  使用的色彩数             */
34     DWORD bClrImportant;   /*  重要的颜色数             */
35 } BMPINF;
36 
37 /*彩色表*/
38 typedef struct RGB_QUAD 
39 {
40     WORD rgbBlue;         /*  蓝色强度  */
41     WORD rgbGreen;        /*  绿色强度  */
42     WORD rgbRed;          /*  红色强度  */
43     WORD rgbReversed;     /*  保留值    */
44 } RGBQUAD;
45 
46 int main()
47 {
48     FILE *fp;
49     BMPFILEHEADER fileHeader;
50     BMPINF infoHeader;
51     long offset, bmpImageSize, width, height, bytesPerPixel, size, bitCount;
52     //    int i, j;
53     //    unsigned char **p;
54     WORD c;
55 
56     if((fp = fopen("C:\\Users\\Mirgo\\Desktop\\5.bmp", "rb")) == NULL)
57     {
58         printf("Cann't open the file!\n");
59         exit(0);
60     }
61 
62     fseek(fp, 0, 0);
63     fread(&fileHeader, sizeof(fileHeader), 1, fp);
64     fread(&infoHeader, sizeof(infoHeader), 1, fp);
65 
66     //计算并输出位图数据的偏移量,图像的大小,宽度和高度,每个像素点所占的字节
67     size = fileHeader.bSize;
68     offset = fileHeader.bOffset;
69     bmpImageSize = infoHeader.bmpImageSize;
70     width = infoHeader.bWidth;
71     height = infoHeader.bHeight;
72     bitCount = infoHeader.bBitCount;
73     bytesPerPixel = infoHeader.bBitCount / 8;
74 
75     printf("%d %d %d %d %d %d %d\n", size, offset, bmpImageSize, width, height, bitCount, bytesPerPixel);
76 
77     //输出每个像素点所占字节中的内容
78     c = fgetc(fp);
79     while (!feof(fp))
80     {
81         printf("%x", c>0?1:0);
82         c = fgetc(fp);
83     }
84 
85     printf("\n");
86 
87     system("pause");
88 
89     fclose(fp);
90 
91     return 0;
92 }

 

posted @ 2014-02-08 11:51  柳如风  阅读(325)  评论(0编辑  收藏  举报
https://www.vultr.com/?ref=7677570