Qt Creator配置FreeImage库
第零步:前言
根据官网介绍:
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库相关推荐
- QT Creator使用matlab库文件读取.mat文件数据
QT Creator使用matlab库文件读取.mat文件数据 一.环境配置 二.关于编程介绍 三.关于使用函数的介绍 1:关于假设数据类型介绍 2:关于使用函数介绍 一.环境配置 第一步先点开我的电 ...
- Qt Creator配置编辑器
Qt Creator配置编辑器 配置编辑器 相关话题 配置编辑器 Qt Creator允许您配置文本编辑器以满足您的特定需求.要配置编辑器,请选择工具>选项>文本编辑器. 这些设置适用于所 ...
- Qt Creator配置项目
Qt Creator配置项目 配置项目 项目激活套件 指定设定 配置项目 当您为目标平台(例如Android或QNX)安装Qt时,可能会在Qt Creator中自动设置开发目标的构建和运行设置. 首次 ...
- QT下配置Boost库
QT下配置Boost库 前言 当使用别人的QT工程,复制到自己机器上,发现报如下错误 从QtCreator报错来看是找不到Boost相关文件和库 问题解决 首先去官网下载Boost库 编译boost库 ...
- Qt Creator配置MSVC编译器
Qt Creator配置MSVC编译器 配置: WINDOWS 7系统 4.9.0 Qt Creator MSVC 2017 VS 2017 步骤: VS官网下载Visual Studio Commu ...
- Qt Creator配置Intel IPP库并实现信号带通滤波
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 文章目录 前言 一.环境参数 二.添加步骤 1.安装IPP2018 2.配置环境变量 3.引入lib文件 三. 测试 输出结果 ...
- Qt Creator配置Yocto交叉编译环境——简洁篇
目录 准备工作: 配置Qt Creator交叉编译构建环境 打开 "Build & Run" 设置,通过 [Menu] -> [Tools] -> [Optio ...
- Qt Creator 配置中文输入法
虽然在安装好的ubuntu系统中已经配置好了中文环境,并有拼音输入法 ibus,但 ibus 并不好用,Qt Creator 不支持 ibus 输入中文.好的生产工具决定好的生产力,下面我们介绍一下 ...
- Qt Creator 配置Msvc 2012的调试器
转自:http://blog.csdn.net/ztz0223/article/details/8936478 该方法可以使用在win 8. 1.编译Qt 5.0.2,编译器为Msvc 2012 2. ...
- qt 添加依赖库lib_如何在Qt Creator中添加库文件和头文件目录
在使用QtCreator开发图像处理程序的时候想加入Opencv库来处理图形,添加头文件,需要编辑工程文件夹下的.pro文件在文件中添加以下内容,即可包含头文件的文件夹: INCLUDEPATH += ...
最新文章
- MVC模式与三层架构的区别
- 修改主机名hosts
- const成员函数、const类对象、mutable数据成员
- 建立代理,而不是框架
- 开启NLP新时代的BERT模型,真的好上手吗?
- oracle undo管理机制,Oracle UNDO数据概念和管理
- springboot中注入FilterRegistrationBean不生效原因
- django系列5.1--ORM对数据库的操作
- 安卓手机小说阅读器_粉笔免费小说阅读器app下载-粉笔免费小说阅读器手机版下载v1.0.1...
- 现在被apihook搞郁闷了.....进展很慢...先放上几个必用的api说明吧.
- 电子工业版了解计算机教案,三年级上册信息技术教案-4.1计算机中的文件和文件夹|电子工业版(宁夏)...
- 开发日记(01) - uni-app 使用等宽字体对齐数字宽度
- 【PC微信探秘】用易语言编写一个微信DLL注入器
- C语言入门教程,C语言学习教程(非常详细)
- python识别图片指定位置文字_python 识别图片中的文字信息方法
- HDU - 1573 X问题
- 基于ASP.NET的图书在线销售管理系统设计与实现
- RenderMonkey基本使用方法【转】
- pgsql数据替换替换换行符
- 英语--日常生活名词收集 Daily Life Nouns Collection