Магия ++ не читает изображение - PullRequest
1 голос
/ 27 марта 2020

В моем первом проекте magick ++ я пытаюсь прочитать изображение, повернуть его и сохранить.

Это источник:

#include <iostream>
#include <Magick++.h>
#include <stdio.h>

using namespace std; 
using namespace Magick; 

int main(int argc, char *argv[]) {
    if (argc < 3)
   {
       printf("Usage: %s <Input file> <Output file>", argv[0]);
        return 1;
   }

   try{
        printf("Opening... %s\n", argv[1]);
        Magick::Image image(argv[1]);

        printf("Rotating...\n");
        image.rotate(45);

        printf("Opening... %s\n", argv[2]);
        image.write(argv[2]);
   }

   catch( Exception &error_ ) 
    { 
      cout << "Caught exception: " << error_.what() << endl; 
      return 1; 
    } 
  return 0;
}

Я компилирую программу с помощью cmake (- > мы c). Он в основном компилируется нормально, просто выдает много предупреждений C4251 этой формы:

"Magick::PathMovetoRel::_coordinates": class "std::vector<Magick::Coordinate,std::allocator<Magick::Coordinate>>" erfordert eine DLL-Schnittstelle, die von Clients von class "Magick::PathMovetoRel" verwendet wird [C:\Users\jfi\Desktop\Hints_Scripts\InsortAP_Toolbox\VSCode\IMhelloworld_cmake\build\IMHelloWorld.vcxproj]

И одно предупреждение C4275:

{
"resource": "/C:/Program Files/ImageMagick-7.0.9-Q8/include/Magick++/Exception.h",
"owner": "cmake-build-diags",
"code": "C4275",
"severity": 4,
"message": "class \"std::exception\" ist keine DLL-Schnittstelle und wurde als Basisklasse für die DLL-Schnittstelle class \"Magick::Exception\" verwendet [C:\\Users\\jfi\\Desktop\\Hints_Scripts\\InsortAP_Toolbox\\VSCode\\IMhelloworld_cmake\\build\\IMHelloWorld.vcxproj]",
"source": "MSVC",
"startLineNumber": 23,
"startColumn": 3,
"endLineNumber": 23,
"endColumn": 3
}

Программа останавливается при чтении изображения. Это не дает никаких сообщений об ошибках. Могу ли я добавить некоторые подробности в магию ++?

Спасибо за вашу помощь!

1 Ответ

2 голосов
/ 27 марта 2020

Из документации

Обязательно инициализируйте библиотеку ImageMagick перед использованием библиотеки Magick ++. Эта инициализация выполняется путем передачи пути к библиотекам ImageMagick (предполагается, что они находятся в том же каталоге, что и ваша программа) в вызов функции InitializeMagick (). Обычно это выполняется путем предоставления пути к вашей программе (argv [0]), как показано в следующем примере:

int main(int argc, char** argv)
{
InitializeMagick(*argv);

Вы не звоните InitializeMagick

...