第零步:前言

根据官网介绍:

FreeImage 是一个开源库项目,面向希望支持当今多媒体应用程序所需的流行图形图像格式(如 PNG,BMP,JPEG,TIFF 和其他格式)的开发人员。FreeImage 易于使用,快速,多线程安全,与 Windows 的所有 32 位或 64 位版本兼容以及跨平台(适用于 Linux 和 Mac OS X)。

凭借其 ANSI C 接口,FreeImage 可用于多种语言,包括 C,C ++,VB,C#,Delphi,Java 和常见的脚本语言,如 Perl,Python,PHP,TCL 或 Ruby。

该库有两个版本:可以与任何 WIN32 或 WIN64 C / C ++ 编译器链接的二进制 DLL 发行版和源码发行版。提供了 Microsoft VS.Net 2013 和 VS.Net 2017 的工程文件,以及 Linux,MinGW 和 Mac OS X 的 makefile。

从 2000 年 1 月到 2002 年 7 月,FreeImage 由 Floris van den Berg 设计并主要开发。FreeImage 现在由 HervéDrolon 维护。

然后介绍下我的开发环境:MSVC2019 + Qt5.15.0-32位

第一步:下载FreeImage

进入官网下载源码或者 DLL:https://freeimage.sourceforge.io/download.html

因为已经提供 Win 版的 DLL 了,所以我直接下的 DLL 版本。网上也有人自己编译的,参照:

https://blog.csdn.net/yanlinei8571/article/details/80918276

(因为本身已经带了工程文件,所以编译还是比较方便的)

第二步:配置FreeImage

先把 FreeImage 的头文件、lib、dll 拷贝到工程目录:

然后在 Qt pro 文件中加上对应的库路径:

#windows
win32{contains(QT_ARCH, i386){#32bitLIBS += -L$$PWD/freeimage/x32/ -lFreeImageINCLUDEPATH += $$PWD/freeimage/x32DEPENDPATH += $$PWD/freeimage/x32}contains(QT_ARCH, x86_64){#64bitLIBS += -L$$PWD/freeimage/x64/ -lFreeImageINCLUDEPATH += $$PWD/freeimage/x64DEPENDPATH += $$PWD/freeimage/x64}
}

现在我们可以使用 FreeImage 的 C 接口了:

void c_test()
{// 初始化FreeImage_Initialise(TRUE);// 文件名const char* imageFile = "F:/Src/code.png";const char* saveFile = "F:/Src/code2.png";// 图片格式FREE_IMAGE_FORMAT fif = FIF_UNKNOWN;// 获取图片格式/* 此处需要特别注意,即使后缀名是.png并不代表图片格式就真是PNG格式,这里先通过FreeImage_GetFileType函数获取图片格式,然后再进行加载,否则,也许会出现加载失败的情况。*/fif = FreeImage_GetFileType(imageFile);if (fif == FIF_UNKNOWN)fif = FreeImage_GetFIFFromFilename(imageFile);FIBITMAP *bitmap1 = NULL;FIBITMAP *bitmap2 = NULL;if ((fif != FIF_UNKNOWN) && FreeImage_FIFSupportsReading(fif)){bitmap1 = FreeImage_Load(fif, imageFile, PNG_DEFAULT);}if (!bitmap1){fprintf(stderr, "Fail to Load Image!\n");exit(-1);}else{FreeImage_Save(fif, bitmap1, saveFile, PNG_DEFAULT);bitmap2 = FreeImage_Load(fif, saveFile, PNG_DEFAULT);if (!bitmap2){fprintf(stderr, "Fail to Load saved Image!\n");exit(-1);}}// 获取影像的宽高,都以像素为单位int width = FreeImage_GetWidth(bitmap1);int height = FreeImage_GetHeight(bitmap1);// 获取总共的像素数目int pixel_num = width*height;// 获取保存每个像素的字节数unsigned int channel = FreeImage_GetLine(bitmap1) / width;printf("Width:%d\t Height:%d\t PixelCount:%d\t Channel:%d\n", width, height, pixel_num, channel);// 获取保存图片的字节数组unsigned char *bits1 = FreeImage_GetBits(bitmap1);unsigned char *bits2 = FreeImage_GetBits(bitmap2);// rgb反序后保存int offset=0;for (int x = 0; x<pixel_num; x++){offset=x*channel;bits2[offset+0] = bits1[offset+2];bits2[offset+1] = bits1[offset+1];bits2[offset+2] = bits1[offset+0];bits2[offset+3] = bits1[offset+3];}// 保存更新后的图片FreeImage_Save(fif, bitmap2, saveFile, PNG_DEFAULT);// 从内存中删除载入图片,防止内存泄漏FreeImage_Unload(bitmap1);FreeImage_Unload(bitmap2);// 撤销初始化FreeImage_DeInitialise();
}

运行结果:

第三步:配置 C++ 的封装

除了 C 接口,FreeImage 还提供了 C++ 等语言的封装:

封装也提供了工程文件便于生成库文件,但是我直接把 Wrapper 的源码拷贝到了我的工程里:

然后在 pro 中导入下:

现在还有 2 个问题:

第一,直接包含的源码,编译时报错,我改了两个地方,FreeImagePlus 头文件加上 FREEIMAGE_LIB 宏,还有 fipWinImage 类我直接注释了;

第二,我使用的是 utf8 文本编码,但源码文件中作者的名字不能正常的用 utf8 显示,还导致编译有问题,我拿 VSCode 编辑器用 utf8 重新保存了。

现在可以跑我们的测试代码了:

(C++封装的在线文档:https://freeimage.sourceforge.io/fip/annotated.html)

void cpp_test()
{
#if defined(FREEIMAGE_LIB) || !defined(WIN32)FreeImage_Initialise();
#endiffipImage image;image.load("F:/Src/code.png");if(!image.isValid())exit(-1);fipImage saveimage(image);//bpp参数位图深度,直接构造不好用,还是拷贝构造一个吧//fipImage saveimage(FIT_BITMAP,image.getWidth(),image.getHeight(),8);if(!saveimage.isValid())exit(-2);//或者用accessPixelsfor(unsigned int row=0;row<image.getHeight();row++){const unsigned char *line=image.getScanLine(row);unsigned char *saveline=saveimage.getScanLine(row);for(unsigned int col=0;col<image.getWidth();col++){//saveline[col*4+0]=line[col*4+0];saveline[col*4+1]=line[col*4+2];saveline[col*4+2]=line[col*4+1];//saveline[col*4+3]=line[col*4+3];}}saveimage.save(FIF_PNG,"F:/Src/code3.png",PNG_DEFAULT);#if defined(FREEIMAGE_LIB) || !defined(WIN32)FreeImage_DeInitialise();
#endif
}

运行结果:

Qt Creator配置FreeImage库相关推荐

  1. QT Creator使用matlab库文件读取.mat文件数据

    QT Creator使用matlab库文件读取.mat文件数据 一.环境配置 二.关于编程介绍 三.关于使用函数的介绍 1:关于假设数据类型介绍 2:关于使用函数介绍 一.环境配置 第一步先点开我的电 ...

  2. Qt Creator配置编辑器

    Qt Creator配置编辑器 配置编辑器 相关话题 配置编辑器 Qt Creator允许您配置文本编辑器以满足您的特定需求.要配置编辑器,请选择工具>选项>文本编辑器. 这些设置适用于所 ...

  3. Qt Creator配置项目

    Qt Creator配置项目 配置项目 项目激活套件 指定设定 配置项目 当您为目标平台(例如Android或QNX)安装Qt时,可能会在Qt Creator中自动设置开发目标的构建和运行设置. 首次 ...

  4. QT下配置Boost库

    QT下配置Boost库 前言 当使用别人的QT工程,复制到自己机器上,发现报如下错误 从QtCreator报错来看是找不到Boost相关文件和库 问题解决 首先去官网下载Boost库 编译boost库 ...

  5. Qt Creator配置MSVC编译器

    Qt Creator配置MSVC编译器 配置: WINDOWS 7系统 4.9.0 Qt Creator MSVC 2017 VS 2017 步骤: VS官网下载Visual Studio Commu ...

  6. Qt Creator配置Intel IPP库并实现信号带通滤波

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 文章目录 前言 一.环境参数 二.添加步骤 1.安装IPP2018 2.配置环境变量 3.引入lib文件 三. 测试 输出结果 ...

  7. Qt Creator配置Yocto交叉编译环境——简洁篇

    目录 准备工作: 配置Qt Creator交叉编译构建环境 打开 "Build & Run" 设置,通过 [Menu] -> [Tools] -> [Optio ...

  8. Qt Creator 配置中文输入法

    虽然在安装好的ubuntu系统中已经配置好了中文环境,并有拼音输入法 ibus,但 ibus 并不好用,Qt Creator 不支持 ibus 输入中文.好的生产工具决定好的生产力,下面我们介绍一下 ...

  9. Qt Creator 配置Msvc 2012的调试器

    转自:http://blog.csdn.net/ztz0223/article/details/8936478 该方法可以使用在win 8. 1.编译Qt 5.0.2,编译器为Msvc 2012 2. ...

  10. qt 添加依赖库lib_如何在Qt Creator中添加库文件和头文件目录

    在使用QtCreator开发图像处理程序的时候想加入Opencv库来处理图形,添加头文件,需要编辑工程文件夹下的.pro文件在文件中添加以下内容,即可包含头文件的文件夹: INCLUDEPATH += ...

最新文章

  1. MVC模式与三层架构的区别
  2. 修改主机名hosts
  3. const成员函数、const类对象、mutable数据成员
  4. 建立代理,而不是框架
  5. 开启NLP新时代的BERT模型,真的好上手吗?
  6. oracle undo管理机制,Oracle UNDO数据概念和管理
  7. springboot中注入FilterRegistrationBean不生效原因
  8. django系列5.1--ORM对数据库的操作
  9. 安卓手机小说阅读器_粉笔免费小说阅读器app下载-粉笔免费小说阅读器手机版下载v1.0.1...
  10. 现在被apihook搞郁闷了.....进展很慢...先放上几个必用的api说明吧.
  11. 电子工业版了解计算机教案,三年级上册信息技术教案-4.1计算机中的文件和文件夹|电子工业版(宁夏)...
  12. 开发日记(01) - uni-app 使用等宽字体对齐数字宽度
  13. 【PC微信探秘】用易语言编写一个微信DLL注入器
  14. C语言入门教程,C语言学习教程(非常详细)
  15. python识别图片指定位置文字_python 识别图片中的文字信息方法
  16. HDU - 1573 X问题
  17. 基于ASP.NET的图书在线销售管理系统设计与实现
  18. RenderMonkey基本使用方法【转】
  19. pgsql数据替换替换换行符
  20. 英语--日常生活名词收集 Daily Life Nouns Collection

热门文章

  1. 微信API接口(收藏)
  2. 8153网卡linux驱动,绿联Type-c千兆网卡RTL8153驱动
  3. UE4官网关于GamePlay框架的介绍
  4. 林轩田机器学习基石笔记(第16节)——概率论与机器学习建立连接
  5. 客流量统计分析系统应用解决方案
  6. 江西科技师范大学泰豪校区计算机专业,扎心了!比取经还艰难的大学路,南昌居然占了这么多……...
  7. React.js 小书 阅读笔记
  8. 文本识别CRNN模型介绍以及pytorch代码实现
  9. spark 部署安装
  10. 微信小程序中播放视频 例子