CImg与jpeglib

时间:2017-11-19 02:10:28

标签: 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解决方案中不可链接。错误消息:

  

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

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

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

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

1 个答案:

答案 0 :(得分:2)

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

选项1

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

#define cimg_use_jpeg

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

选项2

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

如果您想使用此选项,则不得#define cimg_use_jpeg#define cimg_use_magick CImg 将在运行时和 ImageMagick 中查找 ImageMagick convert.exemagick.exe不会为您的 Visual Studio 项目所知或参与其中。你可以打电话:

imagemagick_path()

在运行时告知 CImg 您已安装 ImageMagick convert.exemagick.exe。如果您使用此选项,则应在保存图片时使用通用save()方法,而不是save_jpeg()save_png()

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

选项3

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

#define cimg_use_magick

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

根据您的目标,您可以设想安装更简单,更轻量级的 NetPBM 工具,并将图片转换为PBM/PGM/PPM格式,因为 CImg 可以原生读取和写入那些没有任何外部库的文件。

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