|  | 
 
| bmp ReadBmp(char *bmpName) {
 bmp m;                        // 定义一个位图结构
 FILE *fp;
 unsigned char *BmpBuf;
 int i;
 int bmpWidth;        // 图像的宽
 int bmpHeight;        // 图像的高
 int biBitCount;        // 图像类型,每像素位数
 int lineByte;
 
 if((fp=fopen( bmpName, "rb"))==NULL)
 {
 printf( "can't open the bmp imgae.\n ");
 exit(0);
 }
 else
 {
 fread(&m.file.bfType, sizeof(char), 2, fp);                                // 类型
 fread(&m.file.bfSize, sizeof(int), 1, fp);                                    // 文件长度
 fread(&m.file.bfReserverd1, sizeof(short int), 1, fp);        // 保留字 1
 fread(&m.file.bfReserverd2, sizeof(short int), 1, fp);        // 保留字 2
 fread(&m.file.bfbfOffBits, sizeof(int), 1, fp);                        // 偏移量
 fread(&m.info.biSize, sizeof(int), 1, fp);                                    // 此结构大小
 fread(&m.info.biWidth, sizeof(int), 1, fp);                                // 位图的宽度
 fread(&m.info.biHeight, sizeof(int), 1, fp);                            // 位图的高度
 fread(&m.info.biPlanes, sizeof(short), 1, fp);                            // 目标设备位图数
 fread(&m.info.biBitcount, sizeof(short) ,1, fp);                    // 颜色深度
 fread(&m.info.biCompression, sizeof(int), 1, fp);                    // 位图压缩类型
 fread(&m.info.biSizeImage, sizeof(int), 1, fp);                        // 位图大小
 fread(&m.info.biXPelsPermeter, sizeof(int), 1, fp);                // 位图水平分辨率
 fread(&m.info.biYPelsPermeter, sizeof(int), 1, fp);                // 位图垂直分辨率
 fread(&m.info.biClrUsed, sizeof(int), 1, fp);                            // 位图实际使用颜色数
 fread(&m.info.biClrImportant, sizeof(int), 1, fp);                    // 位图显示中比较重要颜色数
 }
 
 // 获取图像宽、高、每像素所占位数等信息
 bmpWidth = m.info.biWidth;
 bmpHeight = m.info.biHeight;
 biBitCount = m.info.biBitcount;
 
 // 定义变量,计算图像每行像素所占的字节数(必须是4的倍数)
 lineByte = (bmpWidth*biBitCount/8+3)/4*4;
 
 // 灰度图像有颜色表,且颜色表表项为256
 if(biBitCount == 8)
 {
 // 分配内存空间
 m.pColorTable = (RGBQUAD *)malloc(256*4);
 // 申请颜色表所需要的空间,读颜色表进内存
 fread(m.pColorTable, sizeof(RGBQUAD), 256, fp);
 }
 
 // 分配内存空间
 m.imgBuf = (unsigned char *)malloc(m.info.biSizeImage);
 BmpBuf = (unsigned char *)malloc(m.info.biSizeImage);
 
 // 读位图数据
 fread(BmpBuf, lineByte * bmpHeight, 1, fp);
 
 // 将读到的数据垂直镜像翻转
 for(i = 0; i < bmpHeight; i++)
 memcpy((void *)(m.imgBuf + lineByte * i),
 (void *)(BmpBuf + lineByte * (bmpHeight - i - 1)), lineByte);
 // 关闭文件
 fclose(fp);
 
 return m;
 }
 如果我想读取一个颜色深度为24的bmp图像(程序针对颜色深度为8),应该如何修改程序中的设置。。
 
 
 | 
 |