2017-09-05 199 views
0

任何时候我尝试加载图像时出现错误,说CImg<unsigned char>::load(): Failed to recognize format of file。这发生在jpg和png文件中。无法使用CImg加载任何图像

我发现其他职位有关这句话来定义cimg_use_pngcimg_use_jpeg,但后来我得到编译errorstelling我,我需要png.njpeglib.h。不知道我应该从哪里得到这些信息。

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

+0

我没有得到它的工作。我发现了libjpeg的预编译版本,但是一旦我设置了原始错误(无法识别文件的格式)就回来了。最后我切换到了stb_image。 – Alex

+0

很抱歉听到这个消息。你使用的是哪个版本的Windows?你是否使用Visual Studio - 如果是,哪个版本? –

+0

Windows 10和VS2017社区。我也使用默认的空C++解决方案。 – Alex

回答

2

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

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

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


好了,经过尝试2痛苦的日子制定出地球如何在的Visual Studio 2017年工作,以及如何安装和集成libjpeg有了它,我现在就可以解释了如何安装CIMG和libjpeg的在Windows上。

步骤1

您需要安装的Visual Studio 2017年,这意味着你需要的Windows 7 SP1的或更好。当安装时,一定要包括的 “Windows SDK 8.1”

enter image description here

步骤2

下载libjpegIJG website。我拍了jpegsr9b.zip,因为它是最新的。

enter image description here

步骤3

解压缩文件并将其保存在你的home目录名为libjpeg目录。

步骤4

转到开始>所有程序>微软的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 - 一些奇怪的微软“解决方案”文件。命令是:

nmake -f makefile.vc setup-v10 

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

步骤7

现在开始的Visual Studio 2017年,并打开刚才创建的文件jpeg.sln和建设项目。它将在您的libjpeg目录中创建一个Release目录,在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

下载CImg.hGithub,并将其保存在你的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


如果您正在使用cmake的Linux/MACOSthis answer显示你的方式。


如果在命令行MACOS编译,你需要有,如果你是在屏幕上显示的图像XQuartz安装,你会想是这样的:

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

我已经更新了我的答案,详细介绍了如何在Windows中安装和链接'libjpeg'。 –