建立一个单文档应用程序DIP,在工程的stdafx.h文件中包含FreeImage.h,并在工程设置对话框的Link标签中分别为调试版和发行版添加FreeImaged.lib和FreeImage.lib。也可以在stdafx.h中自动链接FreeImage库,代码如下:
#ifdef _DEBUG
#pragma comment(lib, "FreeImaged.lib")
#else
#pragma comment(lib, "FreeImage.lib")
#endif
默认情况下,FreeImage被当作动态链接库。若需用作静态链接库,则在应用程序类的InitInstance中调用FreeImage_Initialise(0)加载FreeImage库,重载ExitInstance并在其中调用FreeImage_DeInitialise()释放FreeImage库。
四、读取图像
FreeImage是插件驱动的,每种位图的读写函数实际上就是一个插件模块。采用插件驱动型构架便于功能扩展,通过创建或引入新的插件,可以支持新的图像类型。
为便于维护打开的位图,在文档类添加FIBITMAP型指针m_pFI,用以指向打开的位图。在构造函数中将其置为空,在析构函数中调用FreeDIB将其释放。FreeDIB定义如下:
void CDIPDoc:: FreeDIB ()
{
if(m_pFI) {
FreeImage_Unload(m_pFI);//释放位图
m_pFI = NULL;
}
}
在OnNewDocument()和OnFileOpen()函数中也应调用FreeDIB,以确保建立或打开新图像时先释放以前的位图。
读取图像的基本步骤如下:
调用库函数FreeImage_GetFileType由文件头分析文件类型,若不能识别,则调用库函数FreeImage_GetFIFFromFilename从文件扩展名判断文件类型。 若是支持的图像文件类型,则调用库函数FreeImage_FIFSupportsReading判断是否支持该位图类型的读操作,若支持则调用库函数FreeImage_Load加载位图。
|