无法使用CImg加载任何图像

时间:2017-09-05 13:04:32

标签: c++ libjpeg cimg

每当我尝试加载图片时,都会收到错误CImg<unsigned char>::load(): Failed to recognize format of file。对于jpg和png文件都会发生这种情况。

我找到了关于此说法的其他帖子来定义cimg_use_pngcimg_use_jpeg,但后来我收到编译错误,我需要png.njpeglib.h。不知道我应该从哪里得到这些。

我不确定我哪里出错了,所以我不知道具体要问什么。出了什么问题?

2 个答案:

答案 0 :(得分:4)

如果要打开JPEG图像,则需要安装libjpeg并进行编译和链接。

如果要打开PNG图像,则需要安装libpnglibz(用于压缩)并编译并链接它们。

目前,您应该能够使用NetPBM格式的图像 - 即PBM,PGM和PPM。

好吧,经过两天痛苦的努力,试图了解地球 Visual Studio 2017 的工作方式,以及如何安装和集成libjpeg,我现在可以解释如何安装Windows上的 CImg 和libjpeg。

第1步

您需要安装 Visual Studio 2017 ,这意味着您需要 Windows 7 SP1 或更高版本。安装时,请确保包含&#34; Windows 8.1 SDK&#34;

enter image description here

第2步

IJG website下载libjpeg。我拿了jpegsr9b.zip,因为它是最新的。

enter image description here

第3步

解压缩文件并将其存储在HOME目录中名为libjpeg的目录中。

第4步

转到开始&gt;所有程序&gt; Microsoft Visual Studio 2017&gt; Visual Studio工具&gt; VS2017的开发人员命令提示符

导航到刚刚解压缩的目录。这将是这样的:

cd libjpeg
cd jpeg-9b

第5步

现在您需要找到一个名为win32.mak的文件。我在C:\Program Files\Microsoft SDKs\Windows\v7.0\Include找到了我的。如果您使用Windows 8.1 SDK,则可能位于其他位置。无论如何,无论在哪里,您都需要将其包含的目录添加到您的包含。所以我做了:

set INCLUDE=%INCLUDE%;C:\Program Files\Microsoft SDKs\Windows\v7.0\Include

第6步

现在运行nmake以获取您的SLN - 一些奇怪的Microsoft &#34;解决方案&#34; 文件。命令是:

nmake -f makefile.vc setup-v10

你应该得到一个名为jpeg.sln的文件 - 欢呼!

第7步

现在启动 Visual Studio 2017 ,然后打开刚刚创建的jpeg.sln文件并构建项目。它将在Release目录和libjpeg目录中创建Release目录,您将找到jpeg.lib。您现在已经安装了libjpeg

enter image description here

第8步

关闭该项目,启动一个新的C ++命令行项目并编写基于CImg的程序。我写了最简单的一句话:

#define cimg_use_jpeg
#include "CImg.h"
using namespace cimg_library;
int main() {
    CImg<unsigned char> img("C:\\Users\\Mark\\test.jpg");
    img.display("Image");
    return 0;
}

第9步

Github下载CImg.h,并将其保存在HOME目录中名为CImg的目录中。

第10步

现在告诉Visual Studio包含文件(CImglibjpeg)的位置以及库文件(libjpeg)的位置:

enter image description here

第11步

现在告诉 Visual Studio 2017 您要与libjpeg建立链接:

enter image description here

第12步

现在您可以编译,链接和运行 CImg 程序并加载JPEG文件并在屏幕上显示它们!

enter image description here

如果您在 Linux / macOS 上使用cmakethis answer会向您显示。

如果您从命令行编译 macOS ,如果您在屏幕上显示图像,则需要安装 XQuartz ,并且您&# 39;我想要这样的东西:

g++ -std=c++11  sample.cpp -o sample -I /opt/X11/include -L /opt/X11/lib -lX11 -ljpeg -lpng -lz

答案 1 :(得分:0)

如果您希望CImg处理jpeg或png图像,则需要提供适当的库。

这是一个如何将libjpeg安装到Visual Studio项目的教程。这基本上是Mark Setchell的答案的2019年更新。

如何将libjpeg安装到您的项目

  1. 下载包含源代码的jpegsr9c.zip(或更新版本)zip downloading jpeg source code

  2. 将存档提取到文件夹中。

  3. 复制从存档中提取的文件夹的地址 folder from archive

  4. 在“开始”菜单中搜索开发人员命令提示符 start menu search

  5. 导航到开发人员命令提示符中的提取文件夹:

      

    cd“ C:\ Users \ HP \ Downloads \ temp \ jpeg-9c”

使用右键单击粘贴。

changing directory

  1. 运行此命令:

      

    NMAKE / f makefile.vs setup-v15

running nmake

  1. 打开jpeg.sln(现已创建)。

new file

  1. 在解决方案资源管理器中,右键单击该项目。选择重新定位项目。确认提示。

retarget projects

  1. 如果要为64位平台构建项目:右键单击解决方案,选择Configuration Manager并添加新平台x64 select configuration manager new platform x64 platform

  2. 构建解决方案

build solution

build success

  1. 现在让我们使用CImg移至您的项目。在您的项目中创建一个文件夹jpeglib(对我来说是IncludedLibraries \ jpeglib)。并将其添加到Project Properties -> C/C++ -> Additional Include DirectoriesProject Properties -> Linker -> Additional Library Directories Additional Include Directories Additional Library Directories

  2. jpeg.lib添加到Project Properties -> Linker -> Input -> Additional Dependencies

Additional Dependencies

  1. x64/Release/jpeg.lib复制到此文件夹。

  2. 在jpeg项目中搜索所有头文件(` .h )并将其复制到此文件夹中。

all files

  1. 在项目中的#define cimg_use_jpeg之前添加#include "CImg.h"

define cimg_use_jpeg

  1. 全部完成! CImg现在可以读取和保存jpeg文件。