RGB24转换成BMP图像

这篇博客主要介绍了将RGB24数据转换成BMP图像的过程,涉及位图文件头和信息头的结构、小端存储、C语言结构体对齐规则以及BMP图像的RGB数据存储方式。博主指出了雷神博客中结构体定义的错误,并提供了正确的结构体定义。此外,还讨论了BMP数据的存储方向,以及如何在C语言中实现RGB24到BMP的转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近学习雷神的博客, RGB24转换成BMP位图, 发现一些问题与心得, 记录下来

1.位图知识:(会列出两篇比较好的博文, 这里简单总结一下)

位图结构:

位图文件头(14字节)

位图信息头(40字节)

彩色表(RGB24真彩不存在彩色表)

位图数据(实际上就是RGB数据)

【注意1】:位图文件头与位图信息头一共是54字节, 雷神在博文里写的结构体不正确, 正确的结构体如下:

贴图中的位图文件头为12字节, 因为有两个字节的BM用字符数组表示了, 详见最后的完整代码

/*12Bytes*/
typedef struct                       /**** BMP file header structure ****/  
{  
	unsigned int   bfSize;           /* Size of file */  
	unsigned short bfReserved1;      /* Reserved */  
	unsigned short bfReserved2;      /* ... */  
	unsigned int   bfOffBits;        /* Offset to bitmap data */  
}BITMAPFILEHEADER;

/*40Bytes*/
typedef struct                       /**** BMP file info structure ****/  
{  
	unsigned int   biSize;           /* Size of info header */
	int            biWidth;          /* Width of image */  
	int            biHeight;         /* Height of image */  
	unsigned short biPlanes;         /* Number of color planes */  
	unsigned short biBitCount;       /* Number of bits per pixel */  
	unsigned int   biCompression;    /* Type of compression to use */  
	unsigned int   biSizeImage;      /* Size of image data */  
	int            biXPelsPerMeter;  /* X pixels per meter */  
	int            biYPelsPerMeter;  /* Y pixels per meter */  
	unsigned int   biClrUsed;        /* Number of colors used */  
	unsigned int   biClrImportant;   /* Number of important colors */  
}BITMAPINFOHEADER;

【注意2】:BMP的存储方式是小端存储, 即低字节放低地址, 高字节放高地址

关于大小端存储, 我一直有误区, 我错误理解为"地位放在低地址, 高位放在高地址",这是不对的, 应该是将整个低字节的内容都存储到低地址去

例如内存中存储0x12345678的小端

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值