无法使用 CImg 加载任何图像
Cannot load any image with CImg
每次我尝试加载图像时都会收到一条错误消息 CImg<unsigned char>::load(): Failed to recognize format of file
。 jpg 和 png 文件都会出现这种情况。
我找到了其他关于定义 cimg_use_png
和 cimg_use_jpeg
的帖子,但后来我收到编译错误提示我需要 png.n
和 jpeglib.h
。不确定我应该从哪里得到这些。
不知道自己错在哪里,所以不知道具体问什么。出了什么问题?
如果你想打开JPEG
张图片,你需要安装libjpeg
并编译link。
如果你想打开PNG
图像,你需要安装libpng
和libz
(用于压缩)并编译和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 包含文件(对于 CImg
和 libjpeg
)在哪里以及库文件(对于 libjpeg
)在哪里:
步骤 11
现在告诉 Visual Studio 2017 你想 link 和 libjpeg
:
第 12 步
现在您可以编译、link 和 运行 您的 CImg 程序并加载 JPEG 文件并将它们显示在屏幕上!
如果您在 Linux/macOS 上使用 cmake
,this 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 安装到您的项目中
下载 jpegsr9c.zip(或更高版本)包含源代码的 zip
将存档解压缩到一个文件夹。
复制从存档中提取的文件夹地址
在“开始”菜单中搜索 开发人员命令提示符
在开发人员命令提示符中导航到提取的文件夹:
cd "C:\Users\HP\Downloads\temp\jpeg-9c"
使用右键粘贴。
运行 这个命令:
NMAKE /f makefile.vs setup-v15
- 打开
jpeg.sln
(现已创建)。
- 在解决方案资源管理器中,右键单击该项目。 Select 重新定位项目。确认提示。
如果要为 64 位平台构建项目:右键单击解决方案,select 配置管理器并添加新平台 x64
构建解决方案
现在让我们转到您使用 CImg 的项目。在您的项目中创建一个文件夹 jpeglib(对我来说是 IncludedLibraries\jpeglib)。并将其添加到 Project Properties -> C/C++ -> Additional Include Directories
和 Project Properties -> Linker -> Additional Library Directories
将jpeg.lib
添加到Project Properties -> Linker -> Input -> Additional Dependencies
复制 x64/Release/jpeg.lib
到此文件夹。
在jpeg工程中搜索所有头文件(`.h)复制到该文件夹下
- 在你的项目
#include "CImg.h"
之前添加#define cimg_use_jpeg
- 大功告成! CImg 现在可以读取和保存 jpeg 文件。
每次我尝试加载图像时都会收到一条错误消息 CImg<unsigned char>::load(): Failed to recognize format of file
。 jpg 和 png 文件都会出现这种情况。
我找到了其他关于定义 cimg_use_png
和 cimg_use_jpeg
的帖子,但后来我收到编译错误提示我需要 png.n
和 jpeglib.h
。不确定我应该从哪里得到这些。
不知道自己错在哪里,所以不知道具体问什么。出了什么问题?
如果你想打开JPEG
张图片,你需要安装libjpeg
并编译link。
如果你想打开PNG
图像,你需要安装libpng
和libz
(用于压缩)并编译和link反对他们。
目前,您应该可以使用 NetPBM 格式的图像 - 即 PBM、PGM 和 PPM。
好吧,经过两天痛苦的尝试弄清楚 Visual Studio 2017 的工作原理,以及如何安装 libjpeg
并与之集成,我现在可以解释如何在 Windows.
步骤 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 包含文件(对于 CImg
和 libjpeg
)在哪里以及库文件(对于 libjpeg
)在哪里:
步骤 11
现在告诉 Visual Studio 2017 你想 link 和 libjpeg
:
第 12 步
现在您可以编译、link 和 运行 您的 CImg 程序并加载 JPEG 文件并将它们显示在屏幕上!
如果您在 Linux/macOS 上使用 cmake
,this 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 安装到您的项目中
下载 jpegsr9c.zip(或更高版本)包含源代码的 zip
将存档解压缩到一个文件夹。
复制从存档中提取的文件夹地址
在“开始”菜单中搜索 开发人员命令提示符
在开发人员命令提示符中导航到提取的文件夹:
cd "C:\Users\HP\Downloads\temp\jpeg-9c"
使用右键粘贴。
运行 这个命令:
NMAKE /f makefile.vs setup-v15
- 打开
jpeg.sln
(现已创建)。
- 在解决方案资源管理器中,右键单击该项目。 Select 重新定位项目。确认提示。
如果要为 64 位平台构建项目:右键单击解决方案,select 配置管理器并添加新平台 x64
构建解决方案
现在让我们转到您使用 CImg 的项目。在您的项目中创建一个文件夹 jpeglib(对我来说是 IncludedLibraries\jpeglib)。并将其添加到
Project Properties -> C/C++ -> Additional Include Directories
和Project Properties -> Linker -> Additional Library Directories
将
jpeg.lib
添加到Project Properties -> Linker -> Input -> Additional Dependencies
复制
x64/Release/jpeg.lib
到此文件夹。在jpeg工程中搜索所有头文件(`.h)复制到该文件夹下
- 在你的项目
#include "CImg.h"
之前添加#define cimg_use_jpeg
- 大功告成! CImg 现在可以读取和保存 jpeg 文件。