bmp 图片就是位图,是在几乎任何的操作平台上都支持的图片格式,今天我们就用 bmp 图片来做一个有趣的试验,不用任何的画图工具, 我们只用 16 进制编辑器,在里面输入 16 进制数,然后保存后缀为 .bmp 的文件,由此而构成一副 bmp 图片。虽然最后生成的 bmp 图片在现实生活中没有任何的用处, 但是在纯手工构建这个图片的过程中,你能深刻的体会到 bmp 图片是怎么构成的,这样对于我们做有关 bmp 图片的编程时也是大有裨益的,同时我们还能从中体会到计算机表示数据的思想。 OK , let's begin:
为了减少我们输入和计算的麻烦,我将会构建一个比较简单的图片, 16*16 的图片,即宽 16 个像素,高 16 个像素的 bmp 图片,同时为了不涉及到调色板这种比较麻烦的问题,我们将构建 24 位色的图片,即用 R,G,B 三原色表示一个像素点的图片。
首先我们需要了解一下 bmp 图片的文件头的组成:
bmp 图片的文件头由下面 2 个结构构成:
typedef struct tagBITMAPFILEHEADER {
WORD bfType; // 文件类型
DWORD bfSize; // 文件大小
WORD bfReserved1; // 保留值,为 0
WORD bfReserved2; // 保留值,为 0
DWORD bfOffBits; // 文件中数据的偏移
} BITMAPFILEHEADER;
typedef struct tagBITMAPINFO {
BITMAPINFOHEADER bmiHeader; // bmp 文件信息头
RGBQUAD bmiColors[1]; // 调色板数组
} BITMAPINFO;
在 BITMAPINFO 结构中,根据 bmp 图片位数的不同