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
主要是: