📄 bitmap.h
字号:
#if !defined _BITMAP_H
#define _BITMAP_H
#if !defined _WINDOWS
#define _WINDOWS
#endif
#include <stdio.h>
#if !defined _WINDOWS
#pragma pack(push, _bmp_struct, 2 )
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef unsigned long DWORD;
typedef long LONG;
typedef struct tagBITMAPFILEHEADER
{
WORD bfType; // 位图文件的类型,必须为BM
DWORD bfSize; // 位图文件的大小,以字节为单位
WORD bfReserved1; // 位图文件保留字,必须为0
WORD bfReserved2; // 位图文件保留字,必须为0
DWORD bfOffBits; // 位图数据的起始位置,以相对于位图文件头的偏移量表示,以字节为单位
} BITMAPFILEHEADER; // 14 byte
typedef struct tagBITMAPINFOHEADER
{
DWORD biSize; // 本结构所占用字节数
LONG biWidth; // 位图的宽度,以像素为单位
LONG biHeight; // 位图的高度,以像素为单位
WORD biPlanes; // 目标设备的级别,必须为1
WORD biBitCount; // 每个像素所需的位数,必须是1(双色),4(16色),8(256色)或24(真彩色)之一
DWORD biCompression; // 位图压缩类型,必须是 0(不压缩), 1(BI_RLE8压缩类型)或2(BI_RLE4压缩类型)之一
DWORD biSizeImage; // 位图的大小,以字节为单位
LONG biXPelsPerMeter;// 位图水平分辨率,每米像素数
LONG biYPelsPerMeter;// 位图垂直分辨率,每米像素数
DWORD biClrUsed; // 位图实际使用的颜色表中的颜色数
DWORD biClrImportant; // 位图显示过程中重要的颜色数
} BITMAPINFOHEADER; // 40 byte
typedef struct tagRGBQUAD
{
BYTE rgbBlue; // 蓝色的亮度(值范围为0-255)
BYTE rgbGreen; // 绿色的亮度(值范围为0-255)
BYTE rgbRed; // 红色的亮度(值范围为0-255)
BYTE rgbReserved;// 保留,必须为0
} RGBQUAD;
#pragma pack(pop, _bmp_struct)
#else // !defined _WINDOWS
#include <windows.h>
#endif // !defined _WINDOWS
//==================================================================
// 类 bitmap
// class bitmap
//
// 备注:
// bitmap类封装了对bmp文件的操作。
// 需要:
// 头文件: bitmap.h
// 源文件: bitmap.cpp
//==================================================================
class bitmap
{
public:
//错误信息ID
enum ERROR_TYPE {E_NO_ERROR, E_ILLEGAL_ICON_TYPE, E_NO_ENOUGH_BUFFER, E_ONLY_BMP24};
//返回错误信息
const char *error_msg();
//将类成员变量的值设为初始值
void reset();
#if defined _DBTEL
//{
//ICON类型ID
enum ICON_TYPE {ICON_8BIT, ICON_16BIT, ICON_TYPE_SIZE};
//返回ICON需要的缓冲区大小
size_t icon_size(ICON_TYPE icon_type);
//转换成ICON格式
bool bmp_to_icon(BYTE *iconbuf, size_t len, ICON_TYPE icon_type =ICON_8BIT);
//}
#endif // defined _DBTEL
//读BMP文件
bool load_file(const char *filename);
//构造函数
bitmap();
//析构函数
~bitmap();
protected:
#if defined _DBTEL
//{
//BMP文件的类型ID
enum BMP_TYPE {BMP_1BIT, BMP_4BIT, BMP_8BIT, BMP_16BIT, BMP_24BIT, BMP_32BIT, BMP_TYPE_SIZE};
//定义转换函数类型
typedef void (*_pixel_trans_func)(BYTE *&picon, BYTE *&pbmp);
//转换函数数组
static _pixel_trans_func _trans_func[ICON_TYPE_SIZE][BMP_TYPE_SIZE];
//转换函数
static void _pixel24to8(BYTE *&picon, BYTE *&pbmp);
static void _pixel24to16(BYTE *&picon, BYTE *&pbmp);
//}
#endif // defined _DBTEL
protected:
//错误信息数组
static const char *_errmsg[];
//保存错误信息ID
int _errno;
//BMP文件头指针
BITMAPFILEHEADER *_fileheader;
//BMP文件信息指针
BITMAPINFOHEADER *_info;
//调色板信息指针
RGBQUAD *_pal;
//象素信息指针
BYTE *_pixel;
//整个BMP文件的缓冲区
BYTE *_data;
//整个BMP文件缓冲区的大小
DWORD _datasize;
};
#endif // !defined _BITMAP_H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -