程序分为bmp相关的三个文件以及一个实例文件:
1.bmp格式文件的结构体定义-- bmpstruct.h
2.bmp格式文件的类定义文件-- cBMPimage.h
3.bmp格式文件的类实现文件 - cBMPimage.cpp
4示例文件--main.c
1.bmpstruct.h
#ifndef BMPSTRUCT
#define BMPSTRUCT
//~~~~~~~~~~~~~~~~~~结构体定义~~~~~~~~~~~~~~~~~~~~~~~~//
typedef struct tagBMPHEADER
{
unsigned short bfType; //文件类型
unsigned long bfSize; //bmp文件长度
WORD Reserved1;
WORD Reserved2;
unsigned long bfOffset; //文件描述区长度,16色为118,256色为1078
}BMPHEADER;//现在算一下,有3个int,2个long,正好3*2+2*4=14字节
//图像信息区
typedef struct tagBMPINFOHEADER
{
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;
LONG biXplosPerMeter;
LONG biYplosPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} BMPINFOHEADER;// 2+2*9*4 =40 字节?有疑问
//调色板
typedef struct tagBMPRGBQUAD
{
BYTE rgbBlue;
BYTE rgbGreen;
BYTE rgbRed;
BYTE rgbReserve;
} BMPRGBQUAD;
//位图数据
typedef struct tagIMAGEDATA
{
BYTE red;
BYTE green;
BYTE blue;
}IMAGEDATA;
#endif
2.cBMPimage.h
#pragma once
#include <stdio.h>
#include <windows.h>
#include "bmpstruct.h"
class cBMPimage
{
public:
BMPHEADER file;
BMPINFOHEADER info;
BMPRGBQUAD *palette;
IMAGEDATA *imagedata;
public:
cBMPimage(void);
~cBMPimage(void);
public:
int GetBmpSize(FILE *fp) ;
int bmpload(const char* filename);
int bmpsave(const char* filename);
int bmpcopypara(cBMPimage *bmpimage);
};
3.cBMPimage.cpp (实际使用时最好将printf去掉)
#include "cBMPimage.h"
cBMPimage::cBMPimage(void)
{
palette = NULL;
imagedata = NULL;
}
cBMPimage::~cBMPimage(void)
{
if (palette!=NULL)
{free(palette);
palette = NULL;
}
if (imagedata!=NULL)
{free(imagedata);
imagedata= NULL;
}
}
int cBMPimage::GetBmpSize( FILE *fp )
{
long curpos; // attention! this is a long type.
int len;
curpos = ftel