六、保存图像
(1)调用FreeImage_GetFIFFromFilename函数从文件名判断期望保存的图像类型,如果不支持则返回;否则转(2)。
(2)调用FreeImage_GetImageType判断当前位图数据类型,若为标准位图,则测试是否支持该种图像类型的写操作以及位深度转换,否则调用FreeImage_FIFSupportsExportType检查是否能够输出当前位图。若测试成功,则调用FreeImage_Save保存位图。
在文档类中定义成员函数SaveDIB实现上述功能,代码如下:
BOOL CDIPDOC::SaveDIB(FIBITMAP *dib, LPCTSTR *lpszPath, int flag){
FREE_IMAGE_FORMAT fif=FIF_UNKNOWN;
BOOL bSuccess = FALSE;
fif=FreeImage_GetFIFFromFilename(lpszPath);
if(fif != FIF_UNKNOWN ) {
BOOL bCanSave;
FREE_IMAGE_TYPE image_type = FreeImage_GetImageType(dib);
if(image_type == FIT_BITMAP) {
WORD bpp = FreeImage_GetBPP(dib);
bCanSave=(FreeImage_FIFSupportsWriting(fif) &&FreeImage_FIFSupportsExportBPP(fif, bpp));
}
else {
bCanSave=FreeImage_FIFSupportsExportType(fif, image_type);
}
if(bCanSave) bSuccess=
FreeImage_Save(fif,dib,lpszPath,flag);
}
return bSuccess;
}
|