c++ - CImg 与 jpeglib

标签 c++ linker-errors cimg

我试图让 CImg 与 Visual Sudio 2017 和 jpeg-9b 一起使用,但由于某种原因它不能使用。

代码:

#define cimg_use_jpeg
#include "../CImg/CImg.h"
using namespace cimg_library;

#pragma comment(lib, "libjpeg.a")

CImg<unsigned char> image("../images/img.jpg"), visu(500, 400, 1, 3, 0);

第一步是构建库,其中我遵循了如何使用 MinGW 编译器的描述。即使构建成功,生成的库 libjpeg.a 在 Visual Studio 解决方案中不可链接。错误消息:

State Error LNK2019 unresolved external symbol __imp___iob referenced in function _output_message

另一个生成的库libjpeg.dll.a在加载.jpg文件时抛出错误 CImg Exception (picture)

经过几次重建后,问题仍然存在。 我也尝试使用 VC 编译器,但找不到调用 build comand nmake -f makefile.vc setup-v10 时所需的 win32.mak 文件。该文件的非官方下载在我的电脑上无法正常工作。生成的解决方案无法在 Visual Studio 中打开。

如果没有解决方案,是否有一些解决方法?

最佳答案

如果您想使用 CImg 读取/写入 JPEG 图像,您有多种选择:

选项 1

您可以安装我已经详细介绍过的libjpeg here 。如果您遵循此选项,则必须使用:

#define cimg_use_jpeg

CImg将针对libjpeg进行编译和链接,并读取和写入JPEG图像。您需要编译并安装 libjpeg 才能使用此选项。

选项 2

您可以安装ImageMagick,并且CImg可以将读写委托(delegate)给它。如果您选择此路线,请务必在安装 ImageMagick 期间勾选标题为“安装旧命令”或类似内容的框。此选项使您能够读取和写入除 JPEG 之外的大约 200 种其他图像格式。它对于生成测试图像和尝试算法也非常有用,无需编写任何 C++ 代码。主要缺点是它的分布相当大。

如果您想使用此选项,则不得使用#define cimg_use_jpeg#define cimg_use_magickCImg 将在运行时查找 ImageMagickconvert.exemagick.exe 在运行时ImageMagick 不会被您的 Visual Studio 项目所知,也不会参与其中。您可以调用:

imagemagick_path()

在运行时告诉CImg您在哪里安装了ImageMagickconvert.exemagick.exe 。如果您使用此选项,则在保存图像时应使用通用 save() 方法,而不是 save_jpeg()save_png()

这是迄今为止最简单的选择。

选项 3

如果您想使用此选项,您必须执行以下操作:

#define cimg_use_magick

然后CImg将编译并与Magick++链接 - ImageMagick的C++接口(interface)。这需要您安装 Magick++ 的源代码,这可能是最难实现的选项。


根据您的目标,您可以想象安装更简单、更轻量的 NetPBM 工具,并将图像转换为 PBM/PGM/PPM 格式,因为 CImg 可以原生读取和写入这些内容,根本不需要任何外部库。

可以想象,您可以在加载图像时使用 C++ 的 system() 动态执行此操作。

关于c++ - CImg 与 jpeglib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47373067/

相关文章:

c++ - 在 Android 下删除 C++ 代码中的 C 样式转换

c++ - STL map 比较器能否以某种方式获得指向 map 本身的指针?

c++ - 并行运行 CUDA 和 OpenGL,无需使用互操作性

c++ - Linux 和 C++ : Easy way to exchange objects between two processes

apache - httpd 2.4 和 APR + Ldap 的编译/链接问题 - "undefined reference ..."

c++ - 类的模板特化中的链接器错误

c++ - 使用 CImg 库时 Unresolved external symbol 错误

c++ - Directshow C++ CLR 中未解析的 token (0A00001x)

c++ - CImg 库中的奇怪语法,不知道它叫什么

c++ - CImg 错误 : 'gm.exe' is not recognized as an internal or external command,