以下面的代码是bmp在windows下的结构体定义:
typedef struct tagBITMAPFILEHEADER{
unsigned short bfType; //2 此处需留意
unsigned long bfSize; //4 /* File size in bytes */
unsigned short bfReserved1; //2
unsigned short bfReserved2; //2
unsigned long bfOffBits; //4 /* Offset to image data, bytes */
} __attribute__((packed))BITMAPFILEHEADER, *PBITMAPFILEHEADER; //Attention:"__"是两个"_"! 字边界对齐!4字节对齐 知道在linux的gcc下默认的是四字节的
typedef struct tagBITMAPINFOHEADER{
unsigned long biSize; //4 /* Header size in bytes */
long biWidth; //4 /* Width of image */
long biHeight; //4 /* Height of image */
unsigned short biPlanes; //2 /* Number of colour planes */
unsigned short biBitCount; //2 /* Bits per pixel */
unsigned long biCompression; //4 /* Compression type */
unsigned long biSizeImage; //4 /* Image size in bytes */
long biXPelsPerMeter; //4
long biYPelsPerMeter; //4 /* Pixels per meter */
unsigned long biClrUsed; //4 /* Number of colours */
unsigned long biClrImportant; //4 /* Important colours */
} __attribute__((packed))BITMAPINFOHEADER,*PBITMAPINFOHEADER;
typedef struct tagRGBQUAD {
unsigned char rgbBlue; /* Blue value */
unsigned char rgbGreen; /* Green value */
unsigned char rgbRed; /* Red value */
unsigned char rgbReserved; /* Reserved */
} RGBQUAD;
下面是在linux下的:
要包含#include<stdint.h>头文件
#pragma pack(8)
typedef struct tagBITMAPFILEHEADER{
uint16_t bfType; //2 此处需留意
uint32_t bfSize; //4 /* File size in bytes */
uint16_t bfReserved1; //2
uint16_t bfReserved2; //2
uint32_t bfOffBits; //4 /* Offset to image data, bytes */
} __attribute__((packed))BITMAPFILEHEADER, *PBITMAPFILEHEADER; //Attention:"__"是两个"_"! 字边界对齐!4字节对齐 知道在linux的gcc下默认的是四字节的
#pragma pack()
#pragma pack(8)
typedef struct tagBITMAPINFOHEADER{
uint32_t biSize; //4 /* Header size in bytes */
int32_t biWidth; //4 /* Width of image */
int32_t biHeight; //4 /* Height of image */
uint16_t biPlanes; //2 /* Number of colour planes */
uint16_t biBitCount; //2 /* Bits per pixel */
uint32_t biCompression; //4 /* Compression type */
uint32_t biSizeImage; //4 /* Image size in bytes */
int32_t biXPelsPerMeter; //4
int32_t biYPelsPerMeter; //4 /* Pixels per meter */
uint32_t biClrUsed; //4 /* Number of colours */
uint32_t biClrImportant; //4 /* Important colours */
} __attribute__((packed))BITMAPINFOHEADER,*PBITMAPINFOHEADER;
#pragma pack()
#pragma pack(4)
typedef struct tagRGBQUAD {
unsigned char rgbBlue; /* Blue value */
unsigned char rgbGreen; /* Green value */
unsigned char rgbRed; /* Red value */
unsigned char rgbReserved; /* Reserved */
} RGBQUAD;
#pragma pack()
个人总结
1字节 uint8_t
2字节 uint16_t =unsigned short
4字节 uint32_t =unsigned long
8字节 uint64_t
int32_t =long