由于业务需求,需要提取到的BMP元数据写成BMP文件落地,以下为实现代码:
编译环境:VS2013
运行环境:WIN7
代码如下:
void SaveBmp(const char *fileName, unsigned char *pImgData, int imgLength, int iWidth, int iHeight)
{
BITMAPFILEHEADER bmheader;
memset(&bmheader, 0, sizeof(bmheader));
bmheader.bfType = 0x4d42; //图像格式。必须为'BM'格式。
bmheader.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER); //从文件开头到数据的偏移量
bmheader.bfSize = imgLength + bmheader.bfOffBits;//文件大小
BITMAPINFOHEADER bmInfo;
memset(&bmInfo, 0, sizeof(bmInfo));
bmInfo.biSize = sizeof(bmInfo);
bmInfo.biWidth = iWidth;
bmInfo.biHeight = iHeight;
bmInfo.biPlanes = 1;
bmInfo.biBitCount = 32;
bmInfo.biCompression = BI_RGB;
HANDLE hFile = CreateFileA(fileName, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0);
if (hFile != INVALID_HANDLE_VALUE) {
DWORD dwWritten;
BOOL bRet = WriteFile(hFile, &bmheader, sizeof(BITMAPFILEHEADER), &dwWritten, NULL);
assert(TRUE == bRet);
bRet = WriteFile(hFile, &bmInfo, sizeof(BITMAPINFOHEADER), &dwWritten, NULL);
assert(TRUE == bRet);
bRet = WriteFile(hFile, pImgData, imgLength, &dwWritten, NULL);
assert(TRUE == bRet);
CloseHandle(hFile);
}
}
如有疑问,欢迎留言!
注释:默认使用RGBA8格式保存;
---------------------
作者:技术共享
来源:CSDN
原文:https://blog.csdn.net/WUFEN12334/article/details/78645177
版权声明:本文为博主原创文章,转载请附上博文链接!