FreeImage使用方法
一、FreeImage 简介
FreeImage 是一款免费的、开源的、跨平台(Windows、Linux 和Mac OS X)的,支持20 多种图像类型的(如BMP 、JPEG、GIF 、PNG、TIFF 等)图像处理库。其最大优点就是采用插件驱动型架构,具有快速、灵活、简单易用的特点,得到了广泛使用。相关的源码、库文件及帮助文档可以从http://freeimage.sourceforge.net/免费下载使用。下载最新的FreeImage 3.14.1 [WIN32], 解压缩该FreeImage3141Win32.zip文件,包含FreeImage.h、FreeImage.lib和 FreeImage.dll文件。
FreeImage 的主要功能有多格式位图的读写;方便的位图信息获取;位深度转换;位图页面访问;基本的几何变换和点处理;通道合并与混合等。FreeImage暂时不支持矢量图形和高级图像处理,位图绘制需要由用户来完成。 FreeImage中的所有函数都以FreeImage_开头,如图像文件的读写函数分别为FreeImage_Load和FreeImage_Save。FIBITMAP 数据结构保存着位图信息和像素数据,是FreeImage的核心。
二、初始化 FreeImage
FreeImage 主要包含头文件FreeImage.h 、静态链接库FreeImage.lib 、FreeImaged.lib ,动态链接库FreeImage.dll 和FreeImaged.dll 。其中,以d 结尾的库文件用于调试版,其余用于发行版。为了在VC 中使用FreeImage方法如下:
#i nclude"FreeImage.h"
#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