#include "stdafx.h"
#include <windows.h>
#include <malloc.h>
BYTE* ConvertBmp32To24(BYTE* bmp32, DWORD& out_size)
{
BITMAPFILEHEADER* lpfi = (BITMAPFILEHEADER*)bmp32;
BITMAPINFOHEADER* lpbi = (BITMAPINFOHEADER*)(bmp32 + sizeof(BITMAPFILEHEADER));
//颜色空间转换,如果为32位位图,转换为24
DWORD dwSize32 = lpfi->bfSize - (sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER));
DWORD dwSize24 = (dwSize32 * 3) / 4; //RGB32与RGB24的像素点空间差一个字节
BYTE* pImg24 = new BYTE[dwSize24 + (sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER))]; //存放RGB24存储空间
BYTE* pImg24Temp = pImg24; //设定临时指针,后续进行数据管理
//进行文件头设置
lpfi->bfSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + dwSize24;
lpfi->bfReserved1 = 0;
lpfi->bfReserved2 = 0;
lpfi->bfOffBits = (DWORD)(sizeof(BITMAPFILEHEADER) + lpbi->biSize);
lpbi->biBitCount = 24;//强行指定
lpbi->biSizeImage = dwSize24; // 数据内容大小
// 复制文件头到新数据区域
memcpy(pImg24, lpfi, sizeof(BITM
将32位BMP文件转换为24位BMP
最新推荐文章于 2025-07-28 00:11:21 发布
这段代码演示了如何将32位位图文件转换为24位位图文件。通过读取32位BMP文件,跳过文件头并逐像素处理,将每个像素的RGB值复制到新的24位位图存储中,同时忽略Alpha通道。最终,新生成的24位BMP文件被写入磁盘。


1517

被折叠的 条评论
为什么被折叠?



