带有 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
可以安装ImageMagick,CImg可以委托读写。如果您选择这条路线,请务必在安装 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 将编译并 link 使用 Magick++ - ImageMagick[ 的 C++ 接口=76=]。这将要求您安装 Magick++ 的源代码,这可能是最难实现的选项。
根据您的目标,您可以想象安装更简单、重量更轻的 NetPBM 工具并将图像转换为 PBM/PGM/PPM
格式,因为 CImg 无需任何外部库即可原生读写。
可以想象,您可以使用 C++ system()
在加载图像时动态执行此操作。
我试图让 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
可以安装ImageMagick,CImg可以委托读写。如果您选择这条路线,请务必在安装 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 将编译并 link 使用 Magick++ - ImageMagick[ 的 C++ 接口=76=]。这将要求您安装 Magick++ 的源代码,这可能是最难实现的选项。
根据您的目标,您可以想象安装更简单、重量更轻的 NetPBM 工具并将图像转换为 PBM/PGM/PPM
格式,因为 CImg 无需任何外部库即可原生读写。
可以想象,您可以使用 C++ system()
在加载图像时动态执行此操作。