一开始,先来看看BmpFile.h文件吧。
class CBmpFile //bmp图像文件类
{
public:
CBmpFile();
virtual ~CBmpFile();
public:
BYTE* operator[](int nIndex); //重载运算符[]
const CBmpFile& operator=(CBmpFile& bmpFile); //重载运算符=,实现bmp图像赋值操作
BOOL CreateBmp(int cols,int rows,int pixelPytes);//创造一幅新的bmp位图
BOOL Load4File( LPCSTR lpstrPathName );//加载bmp位图
BOOL Save2File( LPCSTR lpstrPathName );//保存bmp位图到磁盘
void Draw2DC( HDC hDC,int x,int y );//显示bmp位图
public:
BYTE* m_pImgDat; //指向图像数据的指针
int m_Cols,m_Rows,m_PxlBytes;//分别储存图像的列数、行数、每个像素所需的字节数
BYTE* m_pBmpInfo;//指向位图文件信息头的指针
};
{
public:
CBmpFile();
virtual ~CBmpFile();
public:
BYTE* operator[](int nIndex); //重载运算符[]
const CBmpFile& operator=(CBmpFile& bmpFile); //重载运算符=,实现bmp图像赋值操作
BOOL CreateBmp(int cols,int rows,int pixelPytes);//创造一幅新的bmp位图
BOOL Load4File( LPCSTR lpstrPathName );//加载bmp位图
BOOL Save2File( LPCSTR lpstrPathName );//保存bmp位图到磁盘
void Draw2DC( HDC hDC,int x,int y );//显示bmp位图
public:
BYTE* m_pImgDat; //指向图像数据的指针
int m_Cols,m_Rows,m_PxlBytes;//分别储存图像的列数、行数、每个像素所需的字节数
BYTE* m_pBmpInfo;//指向位图文件信息头的指针
};
关于重载运算符就是让实数中的+号可以重新定义让其可以进行类的运算,具体可以参考http://blog.csdn.net/dingyuanpu/article/details/5852825
这就是一个bmp图像文件类,它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BMP文件所占用的空间很大。BMP文件的图像深度可选lbit、4bit、8bit及24bit。BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。
典型的BMP图像文件由四部分组成:
1:位图头文件数据结构,它包含BMP图像文件的类型、显示内容等信息;比如bmp类中的BYTE * m_pBmpInfo
2:
位图信息数据结构,它包含有BMP图像的宽、高、压缩方法,以及定义颜色等信息;
3:
调色板,这个部分是可选的,有些位图需要调色板,有些位图,比如真彩色图(24位的BMP)就不需要调色板;
4:位图数据,这部分的内容根据BMP位图使用的位数不同而不同,在24位图中直接使用RGB,而其他的小于24位的使用调色板中颜色索引值。
下一篇我将会分析BmpFile.cpp中的各种实现class CBmpFile类中的函数。