Ошибка CImg: «gm.exe» не распознается как внутренняя или внешняя команда,

Я новичок в программировании на 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

Решение

У меня была та же ошибка, и мне помогла установка GraphicsMagick (не ImageMagick).

Я скачал и установил GraphicsMagick-1.3.26-Q8-win64-dll.exe из ftp://ftp.graphicsmagick.org/pub/GraphicsMagick/windows/. Вы можете выбрать другой, если вам нужно:

Обратите внимание, что версия QuantumDepth = 8 (Q8), которая обеспечивает промышленность
стандартные 24/32 битные пиксели потребляют половину памяти и примерно на 30% меньше
Процессор, чем версия 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-битной версии).

После этого у меня все заработало.

4

Другие решения

Для некоторых форматов изображений (как .jpg, .png, .tif и в основном все форматы, которые требуют сжатия данных), CImg попытается использовать внешний инструмент для их сохранения (например, convert из ImageMagick или gm от GraphicsMagick).
Если у вас нет установленного, вы не сможете сохранить .jpg файлы без необходимости связывать ваш код с библиотекой libjpeg, чтобы получить встроенную поддержку чтения / записи JPEG (тогда вам нужно #define cimg_use_jpeg до #include "CImg.h", чтобы сообщить библиотеке, что вы хотите использовать функции libjpeg).

Если вы хотите, чтобы все было проще, я бы порекомендовал сохранить ваше изображение, используя другой (не сжатый) формат изображения, как .bmp или же .ppm,
Эти форматы изначально обрабатываются CImg и не требуют связи с внешними библиотеками.

3

Я знаю, что этот вопрос старый, но я продолжал получать одну и ту же ошибку в одном проекте, а не в другом, и это единственная вещь в Google.

Чтобы избавиться от него, нужно сделать 2 вещи:

  1. Установите динамические библиотеки ImageMagick для вашей соответствующей ОС и архитектуры (32/64). http://www.imagemagick.org/script/binary-releases.php

  2. Я использовал VisualStudio, и набор символов должен быть установлен на «Юникод». Ошибка появится снова, когда я вернусь к многобайтовому набору символов. Я думаю, это как-то связано с тем, как CImg обрабатывает строки и неправильно их сравнивает.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector