无法使用CImg加载任何图像

Ale*_*lex 0 c++ libjpeg cimg

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

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

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

Mar*_*ell 5

如果要打开JPEG映像,则需要安装libjpeg并编译并链接到该映像。

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

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


好了,在经历了两天的痛苦工作之后,我试图弄清楚Earth Visual Studio 2017的工作原理以及如何安装和集成libjpeg它之后,我现在可以解释如何在Windows上安装CImg和libjpeg。

步骤1

您需要安装Visual Studio 2017,这意味着您需要Windows 7 SP1或更高版本。安装时,请确保包括“ Windows 8.1 SDK”

在此处输入图片说明

第2步

libjpegIJG网站下载。我jpegsr9b.zip认为这是最新的。

在此处输入图片说明

第三步

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

第四步

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

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

cd libjpeg
cd jpeg-9b
Run Code Online (Sandbox Code Playgroud)

第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
Run Code Online (Sandbox Code Playgroud)

第6步

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

nmake -f makefile.vc setup-v10
Run Code Online (Sandbox Code Playgroud)

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

步骤7

现在启动Visual Studio 2017,然后打开jpeg.sln您刚刚创建的文件并生成项目。它将Release在您的libjpeg目录中和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;
}
Run Code Online (Sandbox Code Playgroud)

步骤9

CImg.hGithub下载,并将其保存CImg在HOME目录中的目录中。

第10步

现在告诉Visual Studio包含文件(用于CImglibjpeg)在哪里,库文件(用于libjpeg)在哪里:

在此处输入图片说明

步骤11

现在告诉Visual Studio 2017您要链接libjpeg

在此处输入图片说明

步骤12

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

在此处输入图片说明


如果您cmakeLinux / macOS上使用,则此答案将向您显示方法。


如果要从命令行在macOS上进行编译,则在屏幕上显示图像时需要安装XQuartz,并且您需要以下内容:

g++ -std=c++11  sample.cpp -o sample -I /opt/X11/include -L /opt/X11/lib -lX11 -ljpeg -lpng -lz
Run Code Online (Sandbox Code Playgroud)