这里演示写出。主要难点是BMP文件头的生成。标准的BMP文件头为54个字节,可采用结构体保存。
在保存文件头时,应当把编译器的对齐优化关掉,否则BM_Header结构体的长度会变成16。
程序的基本操作是先定义BM_Header和BM_Info文件头,检查运行环境是否正确,然后打开一个文件,先写出BM_Header和BM_Info文件头,再通过一个循环逐像素地以 [B, G, R] (蓝、绿、红,小头端)的顺序写出图像信息,直到把一个图像写完。
这段代码没有考虑比特填充,所以为了便于Windows快速存取,只支持(4×M, N)的分辨率。
参考资料:BMP文件格式详解(BMP file format)
https://www.cnblogs.com/Matrix_Yao/archive/2009/12/02/1615295.html
程序在C-Free 4.0,mingw2.95编译器下编译通过。
#include <stdio.h>
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned int uint32_t;
typedef signed char int8_t;
typedef signed short int16_t;
typedef signed int int32_t;
#pragma pack(2) // 这行很重要,否则BM_Header的尺寸会因优化而出现错误
#define u8 uint8_t
#define u16 uint