如何处理32位bmp和24位bmp的问题

这篇博客介绍了如何处理32位和24位BMP图像,特别是如何在处理32位BMP时去除Alpha通道。通过修改Bmp类的open函数,在读取图片时直接丢弃Alpha通道的数据。代码实现中涉及到对BMP文件头、信息头的读取,以及对图像数据的重新组织,确保在24位模式下正确存储RGB信息。

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

在我的上一篇博客中,提到了如何截图的问题,不过留了一个疑问,就是通过程序截图出来的bmp文件是属于32位的,也就是说存储的内容包括alpha,RGB,而我在软件中设计的对bmp图像的处理方式都是针对32位的,这该怎么办呢?ok,下面听我慢慢说来。

其实处理方式很简单,在LZ的软件当中,对bmp图像的处理方式专门有一个类叫做bmp,其实主要用到的就是bmp类的open函数,因此,LZ采用的处理方式就是将bmp类的open函数稍加改动,也就是在打开图片加载图片的时候就将alpha通道去除掉。

32位bmp图片的存储方式是透蓝绿红,24位bmp的存储方式是蓝绿红。因此,在将图片数据流保存到数组中的时候,其实是color颜色层的第一层不要,保留后面的三层,废话不多说,具体代码实现如下:

bool Bmp::Open(const char* FileName)//打开图片
{
if(Exist())
{
Close();
}
FILE *fp=NULL;//建立文件指针
//fopen_s(&fp,FileName,"rb");//以二进制方式读取文件
fp=fopen(FileName,"rb");//以二进制方式读取文件
//fp=fopen("F:\\132.bmp","rb");//以二进制方式读取文件
if(!fp)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值