CImg错误:'gm.exe'无法识别为内部或外部命令,

时间:2013-09-11 06:00:04

标签: c++ eclipse-cdt cimg

我是c ++编程的新手,今天我尝试使用CImg保存图像。 CImg是C ++模板图像处理库。

我写的基本代码是(请原谅任何语法错误,作为我的代码的复制部分):

#include "CImg.h"// Include CImg library header.
#include <iostream>

using namespace cimg_library;
using namespace std;

const int screen_size = 800;

//-------------------------------------------------------------------------------
//  Main procedure
//-------------------------------------------------------------------------------
int main()
{

CImg<unsigned char> img(screen_size,screen_size,1,3,20);
CImgDisplay disp(img, "CImg Tutorial");   
//Some drawing using img.draw_circle( 10, 10, 60, RED);
img.save("result.jpg"); // save the image    
return 0;   
}

但我不能像我说的那样运行我的程序:

Invalid Parameter - 100%
'gm.exe' is not recognized as an internal or external command,
operable program or batch file.

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

[CImg] *** CImgIOException *** [instance(800,800,1,3,02150020,non-shared)] CImg<unsigned char>::save_other() : Failed to save file 'result.jpg'. Format is not natively supported, and no external commands succeeded.
terminate called after throwing an instance of 'cimg_library::CImgIOException'
  what():  [instance(800,800,1,3,02150020,non-shared)] CImg<unsigned char>::save_other() : Failed to save file 'result.jpg'. Format is not natively supported, and no external commands succeeded.

虽然我可以看到图像,但我无法保存。 谷歌搜索后,我发现人们说要安装ImageMagick,我已经安装了它但没有帮助。 一些论坛说要针对libjpeg,libpng,libmagick ++进行编译。但我不知道如何编译这些库。 我正在使用Eclipse CDT插件来编写C ++项目。 请帮帮我。

3 个答案:

答案 0 :(得分:4)

我遇到了同样的错误,并且安装了GraphicsMagick(不是ImageMagick)帮助了我。

我已从ftp://ftp.graphicsmagick.org/pub/GraphicsMagick/windows/下载并安装了GraphicsMagick-1.3.26-Q8-win64-dll.exe。如果您需要,您可以选择另一个:

  

请注意提供行业的QuantumDepth = 8版本(Q8)   标准24/32位像素占用内存的一半,减少约30%   CPU比QuantumDepth = 16版本(Q16)提供48/64位   用于高分辨率颜色的像素。 Q8版本可以进行处理   用于在电脑屏幕上观看的典型照片。如果你是   处理电影,科学或医学图像,使用ICC颜色   配置文件,或处理对比度有限的图像,然后是Q16   建议使用版本。

重要提示:在安装过程中,请勿删除“更新可执行搜索路径”复选框,该复选框会更新环境变量%PATH%,从任何地方提供gm.exe

在我的情况下,还需要安装Ghostscript - 强烈建议由GraphicsMagick安装。有一个到x64 Ghostscript的链接:https://sourceforge.net/projects/ghostscript/files/GPL%20Ghostscript/9.09/gs909w64.exe/download(我把它放在这里,因为来自GraphicMagick网站的链接只能引导你到32位)。

之后,它对我来说很好。

答案 1 :(得分:3)

对于某些图片格式(.jpg.png.tif以及基本上所有需要数据压缩的格式,CImg会尝试使用外部工具来保存它们(例如来自ImageMagick的convert或来自GraphicsMagick的gm。 如果您没有安装,那么您将无法保存.jpg文件,而无需将代码与libjpeg库链接,以获得JPEG读/写的本机支持(然后,您需要在#define cimg_use_jpeg之前#include "CImg.h"告诉图书馆您要使用libjpeg功能。

如果您想让事情更简单,我建议您使用其他(非压缩)图片格式保存图片,.bmp.ppm。 这些格式由CImg本地处理,不需要与外部库链接。

答案 2 :(得分:0)

我知道这个问题已经过时了,但我在一个项目上遇到了同样的错误而在另一个项目上没有出现同样的错误,这是谷歌唯一的问题。

要摆脱它,你必须做两件事:

  1. 为适当的操作系统和体系结构安装动态ImageMagick库(32/64)。 http://www.imagemagick.org/script/binary-releases.php

  2. 我使用的是VisualStudio,字符集必须设置为&#34; Unicode&#34;。当我恢复为多字节字符集时,错误将再次出现。我想这与CImg处理字符串并错误比较它们的方式有关。