我们先来看看在Windows下bmp的存储格式到底是怎样的。大家可以下载一个UltraEdit软件和一个notepad++来进行打开二进制文件和编程。
ps:代码有点长,但是帮助理解,因为没有时间去写面对对象的了。大家将就看一下
1. bmp的存储格式,前面52个字节都是固定的了如下图:
2. 我打开的是一张800*480的全白色图片,自行在画图工具去画。然后看到前面52个字节都代表着不一样的信息。而我们写入bmp文件的时候就应该注意,一定要写52个字节。其次就是bmp的rgb了。
3. 刚才跑去弄驱动了
4. 如下代码就是那52个字节数据
typedef unsigned short int uint16_t;
typedef unsigned int uint32_t;
typedef unsigned long int uint64_t;
typedef struct {
//uint16_t bfType; //文件类型,必须为BM
uint32_t bfSize; //文件大小
uint16_t bfReserved1; //文件保留字
uint16_t bfReserved2; //文件保留字
uint32_t bfOffBits; //文件头的偏移量
} BMPFILESTRUCT;
typedef struct {
uint32_t biSize; //从这里开始到结构体结束总共的字节数
uint32_t biWidth; //BM的宽度
uint32_t biHeight; //BM的高度
uint16_t biPlanes; //目标设备的级别,必须为1
uint16_t biBitCount; //每个像素的位数.
//1(双色,8个像素占1个字节),4(16色,2个像素占1个字节),8(256色,1个像素占1个字节),16(高彩色),24(真彩色,1个像素占3个字节,按顺序分别为B,G,R;)
uint32_t biCompression; //BM压缩类型,0(不压缩),1(BI_RLE8压缩类型),2(BI_RLE4压缩类型)
uint32_t biSizeImage; //BM的大小,其中包括为了补齐行数是4的倍数而添加的空字节
uint32_t biXPelsPerMeter; //BM水平分辨率,每米像素值
uint32_t biYPelsPerMeter; //BM垂直分辨率,每米像素值
uint32_t biClrUsed; //BM实际使用的颜色表中的颜色数
uint32_t biClrImportant; //BM显示过程中重要的颜色数
} BMPINFOSTRUCT;
**接下来就可以打开一个文件然后写到文件里面去了