#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;
将32位BMP文件转换为24位BMP
最新推荐文章于 2023-09-09 15:05:09 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)