带有 jpeglib 的 CImg

CImg with jpeglib

我试图让 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 编译器,但我找不到调用构建 comand nmake -f makefile.vc setup-v10 时所需的 win32.mak 文件。此文件的非官方下载无法在我的电脑上正常运行。无法在 Visual Studio.

中打开生成的解决方案

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

如果你想 read/write JPEG 图片 CImg:

选项 1

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

#define cimg_use_jpeg

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

选项 2

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

如果你想使用这个选项,你不能#define cimg_use_jpeg也不能#define cimg_use_magickCImg 将在运行时 ImageMagick 中寻找 convert.exemagick.exe ImageMagick 不会为您所知,也不会参与您的 Visual Studio 项目。您可以拨打:

imagemagick_path()

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

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

选项 3

如果你想使用这个选项,你必须做:

#define cimg_use_magick

然后 CImg 将编译并 link 使用 Magick++ - ImageMagick[ 的 C++ 接口=76=]。这将要求您安装 Magick++ 的源代码,这可能是最难实现的选项。


根据您的目标,您可以想象安装更简单、重量更轻的 NetPBM 工具并将图像转换为 PBM/PGM/PPM 格式,因为 CImg 无需任何外部库即可原生读写。

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