先贴上代码,有空再填
#include "ReadBmp.h"
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
//变量定义
BITMAPFILEHEADER strHead;
RGBQUAD strPla[256];//256色调色板
BITMAPINFOHEADER strInfo;
//显示位图文件头信息
void showBmpHead(BITMAPFILEHEADER pBmpHead) {
cout << "位图文件头" << endl <<endl;
//cout<<"bfType value is "<<hex<<pBmpHead.bfType<<endl;
cout << "文件大小:" << pBmpHead.bfSize << endl;
cout << "保留字_1:" << pBmpHead.bfReserved1 << endl;
cout << "保留字_2:" << pBmpHead.bfReserved2 << endl;
cout << "实际位图数据的偏移字节数:" << pBmpHead.bfOffBits << endl << endl;
}
void showBmpInforHead(tagBITMAPINFOHEADER pBmpInforHead) {
cout << "位图信息头" << endl << endl;
cout << "结构体的长度:" << pBmpInforHead.biSize << endl;
cout << "位图宽:" << pBmpInforHead.biWidth << endl;
cout << "位图高:" << pBmpInforHead.biHeight << endl;
cout << "biPlanes平面数:" << pBmpInforHead.biPlanes << endl;
cout << "biBitCount采用颜色位数:" << pBmpInforHead.biBitCount << endl;
cout << "压缩方式:" << pBmpInforHead.biCompression << endl;
cout << "biSizeImage实际位图数据占用的字节数:" << pBmpInforHead.biSizeImage << endl;
cout << "X方向分辨率:" << pBmpInforHead.biXPelsPerMeter << endl;
cout << "Y方向分辨率:" << pBmpInforHead.biYPelsPerMeter << endl;
cout << "使用的颜色数:" << pBmpInforHead.biClrUsed << endl;
cout << "重要颜色数:" << pBmpInforHead.biClrImportant << endl;
}
tagRGBQUAD* ReadFile(char *strFile) {
FILE *fpi;
int i;
fpi = fopen(strFile, "rb");
if (fpi != NULL) {
//先读取文件类型
WORD bfType;
fread(&bfType, 1, sizeof(WORD), fpi);
if (0x4d42 != bfType) {
cout << "the file is not a bmp file!" << endl;
return NULL;
}
//读取bmp文件的文件头和信息头
fread(&strHead, 1, sizeof(tagBITMAPFILEHEADER), fpi);
showBmpHead(strHead);//显示文件头
fread(&strInfo, 1, sizeof(tagBITMAPINFOHEADER), fpi);
showBmpInforHead(strInfo);//显示文件信息头
//读出图片的像素数据
cout << endl;
IMAGEDATA **imagedata;//存储像素信息
imagedata = (IMAGEDATA **)malloc(sizeof(IMAGEDATA*)*strInfo.biHeight);
for (i = 0; i < strInfo.biHeight; i++)
*(imagedata + i) = (IMAGEDATA*)malloc(sizeof(IMAGEDATA)*strInfo.biWidth);
//fseek(fpi,54,SEEK_SET);
for (i = 0; i < strInfo.biHeight; i++) {
for (int j = 0; j < strInfo.biWidth; j++) {
fread(*(imagedata + i) + j, sizeof(IMAGEDATA), 1, fpi);
}
}
cout << "==================red======================" << endl;
for (i = 0; i < strInfo.biHeight; i++) {
for (int j = 0; j < strInfo.biWidth; j++) {
printf("%d ", imagedata[i][j].red);
}
cout << endl;
}
cout<<"===================green====================="<<endl;
for( i = 0;i < strInfo.biHeight;i++) {
for(int j = 0;j < strInfo.biWidth; j++){
printf("%d ", imagedata[i][j].green);
}
cout << endl;
}
cout<<"====================blue===================="<<endl;
for(i = 0;i < strInfo.biHeight;i++) {
for(int j = 0;j < strInfo.biWidth; j++){
printf("%d ", imagedata[i][j].blue);
}
cout << endl;
}
fclose(fpi);
}
else {
cout << "file open error!" << endl;
return NULL;
}
}
int main() {
char strFile[30] = "E:\\exp3.bmp";
cout << strFile << endl;
ReadFile(strFile);
system("pause"); //运行框闪退处理
//return 0;
}