bmp文件的生成代码需要注意三个问题:
1. 定义bmp文件头,必须要加 __attribute__((packed)),意思是告诉编译器取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐,是GCC特有的语法。否则编译器自动对齐之后,BMP_FILE_HEADER本来应该是14字节,就变成了16字节,这样生成的bmp文件整个就乱了,就不能被当作一个图形文件来查看了。
2. bmp文件内的像素数据,其宽度必须是4字节的倍数,也就是说下面代码中bmpinfo.biWidth必须是4的倍数。
3. bmpinfo.biBitCount = 24; 我这里用的是rgb格式的数据,所以每个像素点是24bit 。
代码如下:
#include
#include
#include
// bmp headers
typedef struct __attribute__((packed))
{
unsigned short bfType;
unsigned int
bfSize;
unsigned short bfReserved1;
unsigned short bfReserved2;
unsigned int
bfOffBits;
} BMP_FILE_HEADER;
typedef struct __attribute__((packed))
{
u
1. 定义bmp文件头,必须要加 __attribute__((packed)),意思是告诉编译器取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐,是GCC特有的语法。否则编译器自动对齐之后,BMP_FILE_HEADER本来应该是14字节,就变成了16字节,这样生成的bmp文件整个就乱了,就不能被当作一个图形文件来查看了。
2. bmp文件内的像素数据,其宽度必须是4字节的倍数,也就是说下面代码中bmpinfo.biWidth必须是4的倍数。
3. bmpinfo.biBitCount = 24; 我这里用的是rgb格式的数据,所以每个像素点是24bit 。
代码如下:
#include
#include
#include
// bmp headers
typedef struct __attribute__((packed))
{
} BMP_FILE_HEADER;
typedef struct __attribute__((packed))
{