怎么用C++读取和引用位图文件的长和宽

这样的开头应该怎么修改才能实现
#include<stdlib.h>
#include<iostream.h>
#include<fstream.h>
#include"math.h"

typedef struct //位图文件头格式
{
int bfType; /* 类型标志,总是BM */
long bfSize; /* 文件大小 */
int bfReserved1;
int bfReserved2;
long bfOffBits; /* 位图点阵偏移量*/
}HEAD;
typedef struct
{
long biSize; /* 结构体字节总数 */
long biWidth; /* 图像宽度 */
long biHeight; /* 图像高度 */
int biPlanes; /* 必须为1 */
int biBitCount; /* 每个像素所占二进制位数,可能是1,4,8或 24 */
long biCompress; /*压缩方式*/
long biSizeImage; /*像素点阵大小 */
long biXPelsPerMeter; /* 水平像素数*/
long biYPelsPerMeter; /* 垂直像素数 */
long biClrUsed; /*使用的颜色数 */
long biClrImportant; /*重要颜色数 */
}INFO;

typedef struct
{
unsigned char rgbBlue; /*蓝色所占比重*/
unsigned char rgbGreen; /*绿色所占比重*/
unsigned char rgbRed; /*红色所占比重*/
unsigned char rgbReserved; /*保留字节 */
}RGBQUAD;

int Match(int nRed,int nGreen,int nBlue); /*寻找与像素匹配的调色板的序号*/
void Sharp(ifstream &infile,ofstream&outfile);//锐化处理
void Emboss(ifstream &infile,ofstream&outfile);//浮雕效果处理
void Smooth(ifstream &infile,ofstream&outfile);//柔化效果处理
void Mosaic(ifstream &infile,ofstream&outfile);//马赛克效果处理
void Initial(int nChoice); /*初始化图像文件*/

RGBQUAD straPla[256]; /*256色调色板*/
HEAD strHead;
INFO strInfo;
#define nWidth 512
#define nDepth 512 /*处理512×512位图*/
unsigned char naImage[512][512];

只读取长宽属性吗?如下:

#include<iostream>
#include<fstream>

using namespace std;

#pragma pack(1) //1字节对齐
typedef struct tagBITMAPFILEHEADER
{
short bfType; // 位图文件的类型,必须为BM(0-1字节)
int bfSize; // 位图文件的大小,以字节为单位(2-5字节)
short bfReserved1; // 位图文件保留字,必须为0(6-7字节)
short bfReserved2; // 位图文件保留字,必须为0(8-9字节)
int bfOffBits; // 位图数据的起始位置,以相对于位图(10-13字节)
// 文件头的偏移量表示,以字节为单位
} BITMAPFILEHEADER;

typedef struct tagBITMAPINFOHEADER{
int biSize; // 本结构所占用字节数(14-17字节)
long biWidth; // 位图的宽度,以像素为单位(18-21字节)
long biHeight; // 位图的高度,以像素为单位(22-25字节)
short biPlanes; // 目标设备的级别,必须为1(26-27字节)
short biBitCount;// 每个像素所需的位数,必须是1(双色),(28-29字节)
// 4(16色),8(256色)或24(真彩色)之一
int biCompression; // 位图压缩类型,必须是 0(不压缩),(30-33字节)
// 1(BI_RLE8压缩类型)或2(BI_RLE4压缩类型)之一
int biSizeImage; // 位图的大小,以字节为单位(34-37字节)
long biXPelsPerMeter; // 位图水平分辨率,每米像素数(38-41字节)
long biYPelsPerMeter; // 位图垂直分辨率,每米像素数(42-45字节)
int biClrUsed;// 位图实际使用的颜色表中的颜色数(46-49字节)
int biClrImportant;// 位图显示过程中重要的颜色数(50-53字节)
} BITMAPINFOHEADER;

typedef struct tagRGBQUAD {
unsigned char rgbBlue;// 蓝色的亮度(值范围为0-255)
unsigned char rgbGreen; // 绿色的亮度(值范围为0-255)
unsigned char rgbRed; // 红色的亮度(值范围为0-255)
unsigned char rgbReserved;// 保留,必须为0
} RGBQUAD;
#pragma pack()

BITMAPFILEHEADER bfh;
BITMAPINFOHEADER bih;

int main()
{
ifstream input("bitmap.bmp");

if (!input) return 0;
input.read((char*)&bfh, sizeof(BITMAPFILEHEADER));

if (bfh.bfType != (('M'<<8)|'B')) {
cout << "bad format!" << endl;
return 0;
}

input.read((char*)&bih, sizeof(BITMAPINFOHEADER));
cout << bih.biWidth << endl << bih.biHeight << endl;

return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-10-09
VC我有个图片操作的MFC程序,功能包括:jpg、bmp、gif等许多格式的图片显示,类只有4个,全是MFC自动生成的类里面添加的代码,所以读起来很方便。现在有点头疼,不给你看了,里面有你需要的,你可以借鉴一下,如果需要请留邮箱或站内联系。