(来源:http://blog.bioon.net/user1/2484/archives/2009/233212.shtml )
过去一直使用OpenGL进行图形编程,听说使用FreeImage进行图形处理非常方便,最近一段时间学习使用FreeImage进行图形编程。在http://freeimage.sourceforge.net/ 下 载了最新的FreeImage 3.12.0 [WIN32], 解压缩该FreeImage3120Win32.zip文件,将子文件夹Dist下,FreeImage.h、FreeImage.lib和 FreeImage.dll分别放到vc安装文件夹的Include文件夹、LIB文件夹和Bin文件夹中。此外,http://freeimage.sourceforge.net/ 网站上可以下载FreeImage开发组写的参考手册( 《a free, open source graphics library》), 该网站上也可以下载到湖南地震局黎品忠先生翻译成的中文版参考手册(《一个自由、开源的图形库》)。
需要特别注意的是:需要在使用FreeImage库的xxx.CPP或xxx.C程序中进行如下声明:
#i nclude"FreeImage.h"
#pragma comment(lib,"FreeImage.lib")
-----------------------------------------------------------------------------------------
一个简单的程序如下:(转载于梅园 《FreeImage学习笔记》 http://blog.chinaunix.net/u1/58776/showart_527523.html )
#i nclude <iostream>
#i nclude <cassert>
#i nclude"FreeImage.h"
#pragma comment(lib,"FreeImage.lib")
#define show(a) std::cout<< a <<std::endl
int main(int argc,char *argv)
{
//初始化FreeImage
FreeImage_Initialise(TRUE);
//默认分配一块内存存储影像,其中bpp表示图像深度
//FIBITMAP *bitmap = FreeImage_AllocateT(FIT_BITMAP,Width,height,bpp,
//red_mask,green_mask,blue_mask);
//最后一个参数用来改变函数的行为或激活位图插件的一种特性,每个插件有他自己的参数集
//FreeImage_LoadU参数都是一样,不过只在win32下起作用
FIBITMAP * bmp = FreeImage_Load(FIF_BMP,"cs5.BMP",BMP_DEFAULT);
//FreeImage_SaveU和上面的一样
if( bmp)
{
//FreeImage_Save(FIF_BMP, bmp, "whtm.bmp", BMP_DEFAULT);
}
//获取影像的宽高,都以像素为单位
int Width = FreeImage_GetWidth(bmp);
int Height = FreeImage_GetHeight(bmp);
//获取影像的byte宽度,不对,我上面运行与Width相等
int ByteWidth = FreeImage_GetLine(bmp);
//返回每个像素使用灰度值
show(FreeImage_GetBPP(bmp));
//返回数据类型
show(FreeImage_GetImageType(bmp));
//返回调色板的大小
show(FreeImage_GetColorsUsed(bmp));
show(Width<<" "<<Height<<" "<<ByteWidth);
//assert(ByteWidth == Width*8 );
show(FreeImage_GetDIBSize(bmp));
//有调用load就有unload,否则就会内存泄漏
FreeImage_Unload(bmp);
FreeImage_DeInitialise();
return 0;
}
(FreeImage是图像编程四大库(OpenCV/FreeImage/CImg/CxImage)之一。FreeImage:C语言的体系,大量使用指针运算速度可以保证,内含先进的多种插值算法。
另外独有的支持meta exif信息的读取。该库最大的特点就是比较简练,只把重点放在对各种格式图像的读取写入支持上,没有显示部分,实际编程的时候还是需要调用API函数进行显示。 )
其它资料:
http://hi.baidu.com/brianlanbo/blog/item/67c85e11c4c9972fdc540142.html