unsigned short int Width:截取图像的宽度;
unsigned short int Height:截取图像的高度;
char *filename:保存在TF卡中的文件名。
该函数首先根据接收到的文件名参数创建并打开文件。然后将按照位置参数和大小参数来构造BMP文件的信息头,写入文件。
接着,调用了bmp4()这个函数,bmp4()函数返回LCD上指定位置的像素信息。返回的单个像素信息被保存在tmp_rgb变量中。然后函数依次调用GETG_FROM_RGB16()、GETB_FROM_RGB16()和GETR_FROM_RGB16 ()这三个宏定义,从tmp_rgb变量中分别抽取出R、G、B数据并分别将其线性映射为8位数据即映射为RGB888真彩色。宏定义的内容如下所示:
#define GETR_FROM_RGB16(RGB565) ((unsigned char)(( ((unsigned short int )RGB565) >>11)<<3)) //返回8位 R
#define GETG_FROM_RGB16(RGB565) ((unsigned char)(( ((unsigned short int )(RGB565 & 0x7ff)) >>5)<<2)) //返回8位 G
#define GETB_FROM_RGB16(RGB565) ((unsigned char)(( ((unsigned short int )(RGB565 & 0x1f))<<3))) //返回8位 B
之后,截图函数将RGB888颜色信息写入刚才打开的TF卡文件中,并且根据位图宽与四字节对齐的关系来补充需要的0大小字节。所有图像信息写入完毕后,关闭该文件。
截图函数的流程图如图 3.12所示。