16,471
社区成员
发帖
与我相关
我的任务
分享
int GetEncoderClsid(const wchar_t* format, CLSID* clsid) {
unsigned int num = 0;
unsigned int size = 0;
GetImageEncodersSize(&num, &size);
if(size == 0) return -1;
ImageCodecInfo* pImageCodecInfo = (ImageCodecInfo*)(malloc(size));
if(pImageCodecInfo == 0) return -1;
GetImageEncoders(num, size, pImageCodecInfo);
for(unsigned int j = 0; j < num; ++j) {
if(wcscmp(pImageCodecInfo[j].MimeType, format) == 0) {
*clsid = pImageCodecInfo[j].Clsid;
free(pImageCodecInfo);
return j;
}
}
free(pImageCodecInfo);
return -1;
}
void SaveBMP(Image* image, const wchar_t* fn) {
CLSID clsid;
GetEncoderClsid(L"image/bmp", &clsid);
image->Save(fn, &clsid, NULL);
}
void SaveJPG(Image* image, const wchar_t* fn) {
CLSID clsid;
GetEncoderClsid(L"image/jpeg", &clsid);
image->Save(fn, &clsid, NULL);
}
void SaveGIF(Image* image, const wchar_t* fn) {
CLSID clsid;
GetEncoderClsid(L"image/gif", &clsid);
image->Save(fn, &clsid, NULL);
}
void SaveTIF(Image* image, const wchar_t* fn) {
CLSID clsid;
GetEncoderClsid(L"image/tiff", &clsid);
image->Save(fn, &clsid, NULL);
}
void SavePNG(Image* image, const wchar_t* fn) {
CLSID clsid;
GetEncoderClsid(L"image/png", &clsid);
image->Save(fn, &clsid, NULL);
}
//用法如下:
Bitmap source(name.c_str());
if(sub_ext == L".png")
SavePNG(source, sub_fn.c_str());
else if(sub_ext == L".jpg" || sub_ext == L".jpeg")
SaveJPG(source, sub_fn.c_str());
else if(sub_ext == L".bmp")
SaveBMP(source, sub_fn.c_str());
else if(sub_ext == L".gif")
SaveGIF(source, sub_fn.c_str());
else if(sub_ext == L".tif" || sub_ext == L".tiff")
SaveTIF(source, sub_fn.c_str());