Win8.1下FreeImage.lib库的配置和简单使用(转)

转自http://www.codeweblog.com/win8-1下freeimage-lib库的配置和简单使用/

首先,你可以从这里获取FreeImage的完整库文件(访问密码 9a5e)。


配置过OpenGL的同学,可以直接跳过这个部分,VS中配置FreeImage库和配置OpenGL库的流程完全相似。强调一点的是,虽然本人使用的是win8.1下的VS2013,但是个人觉得win7上下的操作系统或者VS2010以上的VS都可以按照这个步骤级逆行配置。可能有区别的是可能共享的Demo不能够直接运行,但是对于FreeImage的使用应该差不错。所以非win8.1和VS2013的也可以按照下面步骤进行配置然后参考Demo使用该库。

  • 首先把FreeImage.h 头文件在"VS安装目录"/VC/include/FreeImage/,FreeImage文件夹需要自己新建;
  • 紧接着把FreeImage.lib静态库扔到"VS安装目录"/VC/lib/中;
  • 最后,把FreeImage.dll动态链接库放在C:\Windows\System32\下(这里C盘为系统盘)。64位的还需要将其放在C:\Windows\SysWOW64\下
  • 到这里简单的配置过程就王完成了。

下面通过Demo来介绍一下FreeImage的一些基本用法,包括图片的加载,获取图片的像素数组,图片保存等。

int main(){
    // 初始化
    FreeImage_Initialise(TRUE);

    // 文件名
    const char* imageFile = "lenna.png";
    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,分别为RGB
    unsigned 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);

    // 获取每个像素对应的RGB
    unsigned 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){
        // 这里对应于上述的每个像素的字节数:3
        reds[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;
}

上述代码运行后会在给定工程下的testFreeImage/下生成lenna_rotate.png图片,为原先图片旋转后的图片。


lenna.png lenna_rotate.png

更多关于FreImage的API可以参考下载的资料中的FreeImage中文教程.pdf 。

现在,你可以开始尝试在自己配置好的FreeImage开发环境下进一步学习怎么使用它的API实现你需要的功能。

时间: 2024-08-04 16:24:45

Win8.1下FreeImage.lib库的配置和简单使用(转)的相关文章

Linux 下开源RXTX库的配置与使用

由于项目需要再Linux下读取串口并进行相关操作. 一般串口操作(Linux)都是用C语言编写的,因为更加底层,也更安全,更易编写,但是由于项目是java的,所以就要使用java的相关库来实现. 我在这里使用的是RXTXcomm.jar. http://rxtx.qbang.org/wiki/index.php/Main_Page 这里有作者关于各个操作系统下的配置问题,由于我这里只用在Linux下使用,所以也就说一下在linux的配置问题. 首先下载RXTXcomm INSTALL是简单的安装

linux下xdebug的安装和配置方法

xdebug简介 Xdebug是一个开放源代码的PHP程序调试器(即一个Debug工具),可以用来跟踪,调试和分析PHP程序的运行状况. xdebug安装 首先让php错误显示,只需要修改php.ini当中的2条指令,把 displayerrors和htmlerrors都设置为On,如下所示 html_errors = On display_errors = On 当然如果你要需要查看更多信息,比如说打印调用栈,哪就需要安装xdebug,这个对于比较复杂的代码系统特别有帮助 xdebug是php

【VC++6.0】成功制作并使用lib库,转载

微软有许多头文件,这些头文件里面定义了许多函数,但是在头文件中你却找不到函数内容的身影,因为函数主体被保存在了lib库中.保存在库中有一个好处,那就是源代码不容易被发现,也就是说其中的一些技术别人不容易学到.废话少说,我们现在就开始制作lib库. 首先,第一步,打开VC++6.0,按Ctrl+N,选择工程选项卡,选中“Win32 Static Library”选项,输入工程名称,我们这里用“Lib库”,大家可以自己选择,至于路径,随便选一个吧,反正这次只是lib的实验. 然后点击“确定”,我们两

linux下编译qt5.6.0静态库——configure配置

 随笔 - 116  文章 - 4  评论 - 7 linux下编译qt5.6.0静态库--configure配置 linux下编译qt5.6.0静态库 linux下编译qt5.6.0静态库 configure生成makefile 安装选项 Configure选项 第三方库: 附加选项: QNX/Blackberry选项: Android 选项: 生成makefile 遇到链接检查失败的情况 生成makefile后进行编译 编译时的错误 多重定义'QT_MODBUS()'和'QT_MODBU

vc下DLL项目设置dll和lib库输出路径以及使用lib/dll库时的包含路径

include 头文件包含路径设置: project->setting->C/C++->常规: Additional include directories(附加包含目录): ../../include等等 链接文件输出目录:    project->setting->配置属性->常规:输出目录 例如:输出目录:$(SolutionDir)Temp\Link\$(ProjectName)\$(ConfigurationName) 解释:项目目录-Temp-Link-工程

VS2015下OpenGL库的配置

写在前面: 最近要用到OpenGL,光是在VS2015下配置就费了很大的劲,现在将我的成果直接贡献给大家,希望能为需要在VS2015下配置OpenGL的读者省去一些麻烦. 正文: 资源地址1:http://pan.baidu.com/s/1kVv8jbx   提取码:owya 资源地址2:http://down.51cto.com/data/2300181 若链接失效,请读者留言,我会发到您的邮箱. 资源都是编译好的,可直接拿来用,亲测可用. 下载资源后,解压“OpenGL安装包.zip”,在“

windows下的gsl(科学计算库)配置

一.GSL介绍 GNU科学计算函数库GSL(GNU Scientific Library)是一个强大的C/C++数值计算函数库,它是一个自由软件,是GNU项目软件的一个部分,遵循GPL协议.GSL是一个为C和C++程序员提供的科学数值运算库.该科学计算库异常强大,函数库提供了大量的数值计算程序,如随机函数.特殊函数和拟合函数等等,整个函数库大约有1000多个函数,几乎涵盖了科学计算的各个方面.提供了如下方面的支持: Complex Numbers          Roots of Polyno

Win7、Win8系统下关于JDK1.7的安装与环境变量的配置

Win7.Win8系统下 关于JDK1.7的安装与环境变量的配置 给大家简单介绍一下关于在win8 下安装jdk1.7以及配置环境变量的过程:(关于JDK我会在最后附上一个网盘下载链接:里面有jdk 1.6 和1.7的32位以及64位的两种不同版本) 1. 首先打开jdk1.7会出现以下界面:点击下一步安装 2. 这时候会出现如下界面:这时候你可以自己修改要安装jdk的位置 3. 然后等待几秒种会又会出现如下界面:这是你自己决定要安装的jre 的位置,建议和jdk放在同一个目录下的不同文件夹里.

win8下cocos2dx-3.2+VS2012环境配置及项目创建

转自http://88cto.com/996655/article/details/33738.html 这是本人CSDN的第一篇博客,因为假期在学校做实训项目接触到了cocos2dx,觉得是一个特别适用强大,有不错的可移植性(虽然可移植性不错,但实际上写好的游戏往Android上移植,我的队友废了好大劲...),所以打算深入学习一下,写一些博客与大家共享,慢慢我发现CSDN博客真的是许多编程爱好者的乐土,所以想要在这里开辟出自己的一点儿空间,留下一些东西,给自己回味,给别人品评. 另外,情况是