CImg与杰普利

CImg with jpeglib

本文关键字:CImg      更新时间:2023-10-16

我试图让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未解析的外部符号__imp___iob在函数_output_message 中引用

另一个生成的库libjpeg.dll.a在加载.jpg文件时引发错误CImg异常(图片)

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

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

如果您想用CImg读取/写入JPEG图像,您有几个选项:

选项1

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

#define cimg_use_jpeg

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

选项2

您可以安装ImageMagickCImg可以将读写委派给它。如果您选择此路径,请确保在安装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++接口。这将要求您安装Magick++的源代码,这可能是最难实现的选项。


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

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