无法使用 CImg 加载任何图像

Cannot load any image with CImg

每次我尝试加载图像时都会收到一条错误消息 CImg<unsigned char>::load(): Failed to recognize format of file。 jpg 和 png 文件都会出现这种情况。

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

不知道自己错在哪里,所以不知道具体问什么。出了什么问题?

如果你想打开JPEG张图片,你需要安装libjpeg并编译link。

如果你想打开PNG图像,你需要安装libpnglibz(用于压缩)并编译和link反对他们。

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


好吧,经过两天痛苦的尝试弄清楚 Visual Studio 2017 的工作原理,以及如何安装 libjpeg 并与之集成,我现在可以解释如何在 Windows.

上安装 CImg 和 libjpeg

步骤 1

您需要安装 Visual Studio 2017,这意味着您需要 Windows 7 with SP1 或更好的。安装的时候一定要包含"Windows 8.1 SDK"

步骤 2

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

步骤 3

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

步骤 4

转到 开始>所有程序>Microsoft Visual Studio 2017>Visual Studio 工具 > 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 "solution" 文件。命令是:

nmake -f makefile.vc setup-v10

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

步骤 7

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

步骤 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)在哪里:

步骤 11

现在告诉 Visual Studio 2017 你想 link 和 libjpeg:

第 12 步

现在您可以编译、link 和 运行 您的 CImg 程序并加载 JPEG 文件并将它们显示在屏幕上!


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


如果您从命令行在 macOS 上编译,您需要安装 XQuartz 如果您要在 macOS 上显示图像屏幕,你会想要这样的东西:

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

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

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

如何将 libjpeg 安装到您的项目中

  1. 下载 jpegsr9c.zip(或更高版本)包含源代码的 zip

  2. 将存档解压缩到一个文件夹。

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

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

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

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

使用右键粘贴。

  1. 运行 这个命令:

    NMAKE /f makefile.vs setup-v15

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

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

  1. 如果要为 64 位平台构建项目:右键单击解决方案,select 配置管理器并添加新平台 x64

  2. 构建解决方案

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

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

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

  2. 在jpeg工程中搜索所有头文件(`.h)复制到该文件夹​​下

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

  1. 大功告成! CImg 现在可以读取和保存 jpeg 文件。