我试图让 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_magick
。 CImg 将在运行时查找 ImageMagick 的 convert.exe
或 magick.exe
在运行时 和 ImageMagick 不会被您的 Visual Studio 项目所知,也不会参与其中。您可以调用:
imagemagick_path()
在运行时告诉CImg您在哪里安装了ImageMagick的convert.exe
或magick.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/