FreeImage库的配置及部分使用(windows)

article/2025/10/12 19:00:18

1、首先下载FreeImage库,http://freeimage.sourceforge.net/download.html,下载如下


2、解压后,如下图所示:



打开2013sln,编译FreeImageLib这个项目(设为启动项),根据debug/release版本选择编译。

编译结果如下:


带d的表示debug版本;

3、接着就是环境配置:

  • 首先把FreeImage.h 头文件在"VS安装目录"/VC/include/
  • 紧接着把FreeImage.lib静态库扔到"VS安装目录"/VC/lib/中;
  • 最后,把FreeImage.dll动态链接库放在应用程序的目录下
  • 通过上述的工作可实现任何地方都能调用这个库;

4、在正式调用库之前,需加上

#ifdef _DEBUG
#pragma comment(lib, "FreeImaged.lib")
#else
#pragma comment(lib, "FreeImage.lib")
#endif

5、下面代码只是简要介绍该库的使用例程(转自https://www.cnblogs.com/wolfplan/p/6085691.html)

更多的使用方法日后继续探索介绍,并可以参考官方PDF文档(有中文的,里面有API介绍)

#include <stdio.h>
#include<FreeImage.h>
#include <stdlib.h>#ifdef _DEBUG#pragma comment(lib, "FreeImaged.lib")#else#pragma comment(lib, "FreeImage.lib")#endifint main(){// 初始化FreeImage_Initialise(TRUE);// 文件名const char* imageFile = "f11.jpg";const char* saveFile = "lenna_rotate.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;// 获取保存每个像素的字节数 这里为3,分别为RGBunsigned int byte_per_pixel = FreeImage_GetLine(bitmap1) / width;printf("Width:%d\t Height:%d\t 像素总数:%d\t 每像素字节数:%d\n", width, height, pixel_num, byte_per_pixel);// 获取保存图片的字节数组unsigned char *bits1 = FreeImage_GetBits(bitmap1);unsigned char *bits2 = FreeImage_GetBits(bitmap2);// 获取每个像素对应的RGBunsigned char *reds = new unsigned char[pixel_num];unsigned char *greens = new unsigned char[pixel_num];unsigned char *blues = new unsigned char[pixel_num];int cur = 0;for (int x = 0; x < pixel_num; ++x){// 这里对应于上述的每个像素的字节数:3reds[x] = bits1[cur++];greens[x] = bits1[cur++];blues[x] = bits1[cur++];}// 反序更新saveFile的字节数组cur = 0;for (int x = pixel_num - 1; x >= 0; --x){bits2[cur++] = reds[x];bits2[cur++] = greens[x];bits2[cur++] = blues[x];}// 保存更新后的图片FreeImage_Save(fif, bitmap2, saveFile, PNG_DEFAULT);// 从内存中删除载入图片,防止内存泄漏FreeImage_Unload(bitmap1);FreeImage_Unload(bitmap2);// 撤销初始化FreeImage_DeInitialise();return 0;
}

补充:VS添加库的方法(经常忘记,在这里做个备忘)

可参考:http://blog.51cto.com/h2appy/1408087

主要是:





http://chatgpt.dhexx.cn/article/5XqkqDJR.shtml

相关文章

void *的使用

void * 为 “不确定类型指针”。 void *不可以解引用 &#xff08;1&#xff09;void *可以接受任何类型的赋值&#xff1a; 任何类型的指针都可以直接赋值给void *型指针&#xff0c;无需进行强制类型转换&#xff0c;相当于void *包含了其他类型的指针。 &#xff08;2&a…

C语言中void的高级应用

C语言中void的高级应用 C语言中的void关键字&#xff0c;void 表示为“无”、“空”、“没有”的意思。所以void是不能用来定义变量的&#xff0c;因为变量是需要固定的空间的 //定时时&#xff0c;编译不通过 void ch a; void a 10;一、void的常用场景 1.1 函数的参数 v…

【C语言】void 和 void* 类型

一. void 类型 1. 为何不能定义 void 类型的变量 为什么不能定义 void 类型的变量&#xff1f;因为它是空类型&#xff0c;不能够为变量提供空间吗&#xff1f; 定义变量的本质是开辟空间&#xff0c;我们用 sizeof 来计算 void 类型的大小&#xff1a; 在vs2017下&#xf…

函数类型——void(无类型函数)

void属于函数类型中的无类型函数之对应的还有实型&#xff08;float,double&#xff09;&#xff0c;整型&#xff08;int&#xff09;&#xff0c;布尔型&#xff08;bool&#xff09;和字符型&#xff08;char&#xff09;。 在介绍void之前先介绍“返回值”&#xff1a; 就…

C语言中的void*是什么?

目录 1.void *是什么2.void*的解引用3.void*类型的应用场景 1.void *是什么 我们之前学过许多类型的指针变量&#xff0c;如整形指针&#xff0c;字符指针&#xff0c;甚至数组指针&#xff0c;函数指针等。 int a 10; int *pa &a;//整形指针pa接受一个整形变量a的地址…

C语言中的void类型函数

最重要的一点是void类型函数里不能出现return语句 &#xff0c;因为与常见的int double float char等数据类型不同&#xff0c;void是一个空类型&#xff0c;也就是说函数没有返回值&#xff0c;所以也不给主函数提供&#xff08;或返回&#xff09;任何信息 一般声明变量时不…

【C语言】如何理解【void(*)(void)】

1.理解【void(*)(void)】 引用阅读 如何理解【void(*)(void)】 void(*)(void) --表示一个返回值为void&#xff0c;没有参数的函数指针 (void(*)(void))--表示【将func这个函数强转成返回值为void&#xff0c;没有参数的函数】的类型转换 测试sizeof(void(*)(void)) #inc…

C语言中的void

文章目录 一.void概要二.void应用场景2.1void能定义变量吗&#xff1f;2.2void这个类型有大小吗&#xff1f;2.3void*能定义变量吗&#xff1f;2.4void*使用2.5void*能不能进行对应的指针运算&#xff1f;2.6void和函数返回值2.7函数void类型的参数 一.void概要 void就是空的意…

C语言 --- void的用法解析

文章目录 一、简介二、用法三、总结 一、简介 ​ void 中文翻译为"无类型"&#xff0c;有的也叫"空类型"。常用在程序中对定义函数的参数类型、返回值、函数中指针类型进行声明。 二、用法 首先应该注意一点的是void类型是不同于其他常见类型的&#xf…

Python爬虫实现英汉互译

用requests模块实现英汉词汇简单互译 1.找到地址&#xff1a; 2.完成代码&#xff1a; import jsonimport requestsurl "https://fanyi.baidu.com/sug" headers {"User-Agent": Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit…

Python 爬虫笔记

Python 爬虫笔记 HTTP协议requests模块get() 和post()函数headers 数据解析正则表达式bs4解析-HTML语法Xpath 批量爬取百度图片selenium 毕设与图像分类相关&#xff0c;所以需要大量的图片数据&#xff0c;所以先学学爬虫爬图片。 本文作为自学笔记&#xff0c;仅供参考 声明&…

爬虫入门练习

目录 网络爬虫一、爬取[南阳理工OJ题目](http://www.51mxd.cn/problemset.php-page1.htm)python代码结果 二、爬取[重交新闻](http://news.cqjtu.edu.cn/xxtz.htm)python代码结果 小结 网络爬虫 简介 网络爬虫英文名叫Web Crawler戒WebSpider。是一种自动浏览网页并采集所需要…

python爬虫网络中断_python爬虫中断

广告关闭 腾讯云11.11云上盛惠 &#xff0c;精选热门产品助力上云&#xff0c;云服务器首年88元起&#xff0c;买的越多返的越多&#xff0c;最高返5000元&#xff01; 当redis的队列为空时&#xff0c;爬虫会重新爬取&#xff1b; 当队列不为空时&#xff0c;爬虫便会接着上次…

爬虫知识综合

1. Scrapy怎么设置深度爬取? 通过在settings.py中设置DEPTH_LIMIT的值可以限制爬取深度&#xff0c;这个深度是与start_urls中定义url的相对值。也就是相对url的深度。若定义url为http://www.domz.com/game/,DEPTH_LIMIT1那么限制爬取的只能是此url下一级的网页。深度大于设…

爬虫之异步爬虫asyncio

与异步爬虫的相见 文章目录 一、asynico是什么&#xff1f;二、使用步骤 1.普通用法2,在爬虫里面的用法 一、asynico是什么&#xff1f; 简言之&#xff0c;就是用这个库可以来实现异步IO 二、使用步骤 1&#xff0c;普通用法 1&#xff0c;下面我们来看一个案例&#xff1…

网络爬虫之规则

网络爬虫之规则 一.Requests库的get()方法1.1requests库的安装1.2 测试requests库的效果1.3 requests库的7个主要方法1.4 requests中的get方法1.5 Response对象的属性&#xff08;牢记&#xff09;1.6 理解Response的编码1.7 对以上知识的讲解运用 二.爬取网页的通用代码框架2.…

网络爬虫入门学习

文章目录 一、初识网络爬虫1.1 网络爬虫定义1.2 爬虫原理1.3 爬虫工作的过程 二、示例一2.1 需要的内置库以及第三方库2.2 具体代码2.3 结果展示&#xff1a; 三、示例二3.1 确定要爬取信息的位置3.2 具体代码3.3 结果展示 四、总结五、参考文献 一、初识网络爬虫 1.1 网络爬虫…

爬虫-Python编程入门

文章目录 一.爬虫1.初识网络爬虫2.网络爬虫的分类2.1 通用网络爬虫2.2 增量爬虫2.3 垂直爬虫2.4 Deep Web爬虫 3.Robots协议 二.创建anaconda虚拟环境三.爬取网站 http://www.51mxd.cn/练习题目数据并保存四.爬取网站http://news.cqjtu.edu.cn/xxtz.html中近几年的消息通知的发…

python爬虫提取人名_python爬虫—爬取英文名以及正则表达式的介绍

python爬虫—爬取英文名以及正则表达式的介绍 爬取英文名: 一. 爬虫模块详细设计 (1)整体思路 对于本次爬取英文名数据的爬虫实现,我的思路是先将A-Z所有英文名的连接爬取出来,保存在一个csv文件中;再读取csv文件当中的每个英文名链接,采用循环的方法读取每一个英文名…

python爬虫什么意思-python的爬虫是什么意思

Python爬虫即使用Python程序开发的网络爬虫(网页蜘蛛,网络机器人),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。其实通俗的讲就是通过程序去获取 web 页面上自己想要的数据,也就是自动抓取数…