带有 jpeglib 的 CImg

Kly*_*yse 2 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);
Run Code Online (Sandbox Code Playgroud)

第一步是库的构建,在这里我按照说明如何使用MinGW编译器。即使构建成功,生成的库 libjpeg.a在 Visual Studio 解决方案中也是不可链接的。错误信息:

状态错误 LNK2019 未解析的外部符号 __imp___iob 在函数 _output_message 中引用

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

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

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

Mar*_*ell 5

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

选项1

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

#define cimg_use_jpeg
Run Code Online (Sandbox Code Playgroud)

CIMG将编译和链接反对libjpeg和读写JPEG图像。您需要编译并安装libjpeg才能使用此选项。

选项 2

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

如果你想使用这个选项,你不能#define cimg_use_jpeg也不能#define cimg_use_magickCImg在运行时查找ImageMagickconvert.exemagick.exe,并且ImageMagick不会为您的Visual Studio项目所知或参与其中。您可以致电:

imagemagick_path()
Run Code Online (Sandbox Code Playgroud)

告诉CIMG在运行时,你已经安装的ImageMagickconvert.exemagick.exe。如果使用此选项,则save()在保存图像时应使用通用方法,而不是save_jpeg()save_png()

到目前为止,这是最简单的选择。

选项 3

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

#define cimg_use_magick
Run Code Online (Sandbox Code Playgroud)

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


根据您的目标,您可以想象安装更简单、重量更轻的NetPBM工具并将您的图像转换为PBM/PGM/PPM格式,因为CImg可以在没有任何外部库的情况下本地读取和写入那些。

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