前言 四大图像库:OpenCV:功能十分的强大,而且支持目前先进的图像处理技术,体系十分完善,操作手册很详细,手册首先给大家补计算机视觉的知识,几乎涵盖了近10年内的主流算法;

http://sourceforge.net/projects/opencvlibrary/

FreeImage :非常好用的开源图像库,支持二十多种类型的图像和多种图像处理功能。只需一个头文件、一个静态库、一个动态链接库即可。目前还不支持矢量图。C语言的体系,大量使用指针运算速度可以保证,内含先进的多种插值算法。

http://freeimage.sourceforge.net/

CImg :就一个.h文件所以用起来很简明,但感觉功能上不如CxImage。

可以与CxImage配合使用,因为CImg提供了基于lapack的矩阵运算函数和完善的线性滤波卷积函数,同时CImg做像素运算还是很方便的。

http://cimg.sourceforge.net/

CxImage:有一个界面很强的demo程序,

http://www.xdp.it/cximage.htm

FreeImage使用方法

FreeImage支持20多种图像类型的(如BMP、JPEG、GIF、PNG、TIFF等)图像处理库。如下图FreeImage允许的位图格式:

FreeImage的使用例子好像很少,这里以Visual Studio 2008+SP1为例说明怎么使用FreeImage图形库。

FreeImage下载是在http://freeimage.sourceforge.net/ ,解压缩后里面有个Dist的文件夹,这里面的五个文件就是我们用FreeImage所需要的全部东东了,即FreeImage.lib、FreeImage.dll、FreeImaged.lib、FreeImaged.dll、FreeImage.h,以d 结尾的库文件用于Debug版本,没有的用于Release版本的。

一、新建一个名称为FITest的MFC单文档应用程序,将FreeImage中的Dist文件夹添加到“工具->选项->项目和解决方案->VC++目录”中的“包含文件”与“库文件”中;

二、初始化

(1)、在stdafx.h 文件中加入如下代码:

#include"FreeImage.h"#ifdef _DEBUG#pragma comment(lib, "FreeImaged.lib")#else#pragma comment(lib, "FreeImage.lib")#endif(2)、例外默认情况下,FreeImage 被当作动态链接库。若需用作静态链接库,则在应用程序类的InitInstance 中调用FreeImage_Initialise(0)来初始化FreeImage库。

(3)、重载ExitInstance 并在其中调用FreeImage_DeInitialise()释放FreeImage 库。这个必须在程序的结尾处唯一地一次调用该函数,以清除FreeImage库在内存中分配的内存,不然会造成很严重的内存泄露。

int CFITestApp::ExitInstance()

{

// TODO: 在此添加专用代码和/或调用基类

FreeImage_DeInitialise();

return CWinAppEx::ExitInstance();

}

三、读取图像

(1)、给CFITestDoc类添加一个public变量

FIBITMAP *m_handleFI;

在类的构造函数添加 :m_handleFI(NULL) 字样,即

CFITestDoc::CFITestDoc():m_handleFI(NULL)

{

// TODO: 在此添加一次性构造代码

}

(2)、给CFITestDoc类添加两个函数,FreeDIB ()和LoadDIB(LPCTSTR lpszPathName, int flag)

函数代码如下

FIBITMAP*  CFITestDoc::LoadDIB(LPCTSTR lpszPathName, int flag)

{

FREE_IMAGE_FORMAT fif = FIF_UNKNOWN;

fif = FreeImage_GetFileType(lpszPathName);  // ansi情况下,LPCTSTR 就是 const char*, 是常量字符串

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;

}

void CFITestDoc::FreeDIB(void)

{

if(m_handleFI)

{

FreeImage_Unload(m_handleFI);// 释放位图

m_handleFI = NULL;

}

}

(3)、在析构函数中释放位图

CFITestDoc::~CFITestDoc()

{

FreeDIB();

}(4)、为CFITestDoc类添加ID_FILE_OPEN的COMMAND事件响应函数OnFileOpen()

void CFITestDoc::OnFileOpen()

{

FIBITMAP* pFI = NULL;

CString szFilter("BMP file(*.bmp)|*.bmp|GPEG file(*.jpg)|*.jpg|All files(*.*)|*.*||");

CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY, szFilter);

if(dlg.DoModal() == IDOK)

{

CString strPath = dlg.GetPathName();

pFI = LoadDIB(strPath, 0);

if(pFI)

{

FreeDIB();// 释放以前的位图

m_handleFI = pFI;// 指向新位图

UpdateAllViews (NULL);

}

}

}

四、显示图像

在视图类CFITestView中的OnDraw()函数添加代码

void CFITestView::OnDraw(CDC* pDC)   //记得去掉注释掉的pDC

{

CFITestDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

if (!pDoc)

return;

// TODO: 在此处为本机数据添加绘制代码FIBITMAP *pFI = pDoc->m_handleFI;if(pFI){BYTE* pBits = FreeImage_GetBits(pFI);

BITMAPINFO* pIf=FreeImage_GetInfo(pFI);int W = FreeImage_GetWidth(pFI);

int H = FreeImage_GetHeight(pFI);

CRect rectClient;GetClientRect(rectClient);

int dstW = rectClient.Width();

int dstH = rectClient.Height();

::SetStretchBltMode(pDC->GetSafeHdc(),COLORONCOLOR);

if(dstW == W && dstH == H)

{

::SetDIBitsToDevice(pDC->GetSafeHdc(),0,0, W, H,0,0,0, H,pBits,pIf,DIB_RGB_COLORS);

}

else {// 按比例缩放

float fScale=(float)(W*dstH)/(float)(H*dstW);

if(fScale > 1.0f)

dstH = (int) (dstH / fScale);

else

dstW = (int) (dstW * fScale);

::StretchDIBits(pDC->GetSafeHdc(),0,0,dstW,dstH,0,0,W,H,pBits,pIf,DIB_RGB_COLORS,SRCCOPY);

}

}

}

五、调试程序

调试程序要注意了,可能在LoadDIB函数中出现错误,提示LPCTSTR不能转换成const char * ,本来在ANSI下两者是一样的,设置一下项目属性。

按Alt+F7快捷键,如下图,设置字符集为【使用多字节字符集】

记得把FreeImaged.dll拷贝到...\FITest\Debug下,FreeImage.dll拷贝到...\FITest\Release目录下。或都拷贝到C:\WINDOWS\system32\下也行。

按Ctrl+F5运行程序。

点击 【文件】->【打开】打开一张图片。。。。。。。

参考资料:源代码:http://freeimage.sourceforge.net/

FreeImage 3.8.0 中文文档

http://cdnetworks-kr-2.dl.sourceforge.net/project/freeimage/Source%20Documentation/3.8.0/FreeImage380Chinese.pdf

Internet ...

c语言freeimage库文件,FreeImage使用方法amp;FreeImage Tutorial相关推荐

  1. S7-200SMART PLC模拟量应用及创建库文件的具体方法

    S7-200SMART PLC模拟量应用及创建库文件的具体方法 具体使用方法可参考以下内容: 模拟量计算公式: OUT = (In_chx - In_RawMin) * (In_EuMax - InE ...

  2. endnote文件enl突然没了_科学网—实际操作中的Endnote库文件损坏修复方法 - 尹卓忻的博文...

    Endnote是保存文件的神器,将文献的详细信息输入标签之后,插入文献只用点一下.不过就算是神器也有掉链子的时候,有时内力不够,刚打开就跳出以下界面:    按对话框的信息,问题是可以通过重启恢复 , ...

  3. VS无法打开源文件及无法打开链接库文件的解决方法

    一.无法打开源文件 依次点击"项目--配置属性--C/C++--常规",在"附加包含目录"中加入.h文件所在的文件夹路径 二.无法打开文件"XXX.l ...

  4. Linux系统中添加库文件路径的方法

    库文件在链接(静态库和共享库)和运行(仅限于使用共享库的程序)时被使用,其搜索路径是在系统中进行设置的.一般 Linux 系统把 /lib 和 /usr/lib 两个目录作为默认的库搜索路径,所以使用 ...

  5. vs2015 全局头文件 库文件引用设置方法

    有两种方法可以设置vs2010的默认包含路径 方法一: 点击"视图->其他窗口->属性管理器",在打开的属性管理器中选择Microsoft.Cpp.Win32.user ...

  6. linux系统下替换图片,Linux(ubuntu系统)下使用FreeImage库

    Linux(ubuntu系统)下使用FreeImage库 Linux(ubuntu系统)下使用FreeImage库 最近在搞一个图像处理的项目,需要用到FreeImage,之前在Windows下用过, ...

  7. linux 链接库文件出现“undefined reference to 问题的解决方法

    最近在Linux下编程发现一个诡异的现象,就是在链接一个静态库的时候总是报错,类似下面这样的错误: (.text+0x13): undefined reference to `func' 关于unde ...

  8. python语言有几种编程方式_零基础自学python语言,有哪几种方法?龟叔说:这套教程带你入门...

    第一我要说的是:你应该先了解python语言的起源,这句话对于自学python的小白来说,本身就是耍流氓. 我们从根源上分析这个问题,这个问题是(从零基础如何自学python编程)? 我的提取关键字: ...

  9. 基于c语言测井原始数据编程,C语言对数据库文件的信息压缩

    C语言对数据库文件的信息压缩 在信息处理中,信息量越来越大,为节省资源,有必要对所存储的信息进行压缩.下面介绍用C语言实现数据库文件信息压缩的方法. 数据库文件的存储结构中,库结构部分由多个定长字节( ...

  10. linux下查看文件的权限,Linux下查看文件权限、修改文件权限的方法

    查看权限命令查看目录的相关权限可以采用命令ls -lD,或者直接用ls -la 如 ls -l www.jb51.net  //这里表示查看www.jb51.net目录 修改权限命令 chmod 77 ...

最新文章

  1. java获取真实ip
  2. jackson 驼峰注解_jackson - jackson annotations注解详解
  3. 多个Activity关闭问题
  4. idea部署springboot项目到外部tomcat
  5. 经典面试题(18):以下代码将输出的结果是什么?
  6. 微机原理和计算机组成原理一样吗_计算机组成原理:计算机的层次与编程语言...
  7. C++学习 ---- 系列文章
  8. NIOS2-IDE环境下的一些操作技巧
  9. mysql scale,Mailchimp Scale:a MySQL Perspective
  10. 微信内置浏览器中实现点击电话号码自动到拨号页面
  11. python字符串 切片_Python切片字符串
  12. 私有5g网络_面向企业的私有5G网络
  13. Pandas 中文API文档
  14. docker安装windows镜像,实战案例
  15. HTML中背景图片如何自适应屏幕
  16. 报文解析(java版)
  17. 速卖通关键词挖掘工具_谷歌优化关键词挖掘工具大全
  18. 小象学院python网课值得吗-2018最新小象学院Python数据分析视频教程升级版第2期...
  19. android m是什么版本号,Android m是什么版本
  20. 设计模式之策略+工厂实现支付功能代码优化

热门文章

  1. 国际象棋AI人机对弈设计
  2. c4d如何把文字贴在物体表面_C4D在简模上整体和局部贴贴图的方法
  3. ros系统能用c语言编程,ROS操作系统学习(十一)参数的使用与编程方法
  4. ASA上的NAT配置及互联网接入(动态NAT、动态PAT、静态NAT、静态PAT以及NAT豁免、使用思科TFTP服务器上传ASDM模块)
  5. java中将url下载并转换为MultipartFile文件
  6. python离线安装环境 解决 ERROR: Could not find a version that satisfies the requirement xxx 以及winError[10061]
  7. 用IDEA进行git版本控制
  8. 浅谈分块二元Hermite插值
  9. 基于SWMM及自主开发城市内涝一维二维耦合软件的复杂城市排水系统建模技术及在城市排涝、海绵城市等领域实践
  10. CMMI有几个过程域?