在文档类中添加成员函数LoadDIB,实现位图读入功能,代码如下:
FIBITMAP* CDIPDoc::LoadDIB(LPCTSTR lpszPathName, int flag){
FREE_IMAGE_FORMAT fif = FIF_UNKNOWN;
fif = FreeImage_GetFileType(lpszPathName);
if(fif == FIF_UNKNOWN) fif =
FreeImage_GetFIFFromFilename(lpszPathName);
if((fif != FIF_UNKNOWN) &&
FreeImage_FIFSupportsReading(fif)) {
FIBITMAP *dib = FreeImage_Load(fif, lpszPathName, flag);
return dib;
}
return NULL;
}
若想在打开文件对话框中显示FreeImage所支持的图像文件类型,则可以在文档类中添加GetFilterString函数,用以创建FreeImage支持的图像类型过滤字符串。其基本过程为:调用FreeImage_GetFIFCount函数获取FreeImage库所支持的图像文件类型数;针对每种图像类型,调用FreeImage_GetFIFExtensionList获取其扩展名列表,调用FreeImage_GetFIFDescription函数获取其类型描述字符串;将各种图像类型信息依次连接成“BMP Files (bmp)|*.bmp|JPEG Files (jpg,jif,jpeg,jpe)|*.jpg;*.jif;*.jpeg;*.jpe||”形式的字符串,就形成了图像文件类型过滤字符串。
int CDIPDoc::GetFilterString(char *szFilter)
{
int i, iCount;
char Filter[1024], *token;
Filter[0] = '\0'; szFilter[0] = '\0';//空字符
for(i=0; i<FreeImage_GetFIFCount();i++){
strcat(Filter,FreeImage_GetFIFExtensionList((FREE_IMAGE_FORMAT)i));
strcat(Filter, ",");
}
Filter[strlen(Filter)-1] = '\0';
strcat(szFilter, "All image files|");
token = strtok(Filter, ",");
while(token != NULL) {
strcat(szFilter, "*."); strcat(szFilter, token);
strcat(szFilter, ";");token = strtok(NULL, ",");
}
szFilter[strlen(szFilter)-1] = '|';
Filter[0] = '\0'; iCount = 0;
for(i=0;i<FreeImage_GetFIFCount();i++){
sprintf(Filter, "%s (%s)|", FreeImage_GetFIFDescription((FREE_IMAGE_FORMAT)i),FreeImage_GetFIFExtensionList((FREE_IMAGE_FORMAT)i));
|