有BitMap对象 需要保存到文件 保存为bmp格式
网上找到的很多方法是自己向文件中写文件头、文件标记、文件数据…… 完全自己生成了bmp文件。
其实还有简单方法
BitMap对象继承自 Image对象。而Image对象具有Save方法。这里直接调用BitMap的sava方法即可,简单、高效。
本人对该操作进行了简单封装 如下
int GetEncoderClsid(const WCHAR* format, CLSID* pClsid)
{
UINT num = 0; // number of image encoders
UINT size = 0; // size of the image encoder array in bytes
ImageCodecInfo* pImageCodecInfo = NULL;
GetImageEncodersSize(&num, &size);
if(size == 0)
return -1; // Failure
pImageCodecInfo = (ImageCodecInfo*)(malloc(size));
if(pImageCodecInfo == NULL)
return -1; // Failure
GetImageEncoders(num, size, pImageCodecInfo);
for(UINT j = 0; j < num; ++j)
{
if( wcscmp(pImageCodecInfo[j].MimeType, format) == 0 )
{
*pClsid = pImageCodecInfo[j].Clsid;
free(pImageCodecInfo);
return j; // Success
}
}
free(pImageCodecInfo);
return -1; // Failure
}
bool Save(Bitmap * const pBitMap, LPCTSTR lpFileName)
{
CLSID encoderClsid;
GetEncoderClsid(L"image/bmp", &encoderClsid);
pBitMap->Save(lpFileName, &encoderClsid, NULL);
return true;
}
BitMap的sava方法 第二个参数指保存文件的类型 第三个参数是类型相关的参数 比如压缩方法 压缩率
BitMap的sava方法除了可以保存bmp外 还可以保存
- image/bmp
- image/jpeg
- image/gif
- image/tiff
- image/png
这些图像格式的保存 需要设置相应的第三个参数