【问题标题】:Save Montage to Blob with Magick++使用 Magick++ 将蒙太奇保存到 Blob
【发布时间】:2013-02-12 08:37:15
【问题描述】:

我有一个蒙太奇,我可以在指定目标路径时将其保存到磁盘。但是当我尝试将其保存到 Blob 时失败了。

我是否缺少某些设置?

版本:ImageMagick 6.8.2-5 2013-02-05 Q8

机器:Windows 7 x64

编辑:例外:

Unhandled Exception: System.Runtime.InteropServices.SEHException: External component has thrown an exception.
   at Magick.throwException(_ExceptionInfo* )
   at Magick.writeImages<class std::_List_iterator<class std::_List_val<class Magick::Image,class std::allocator<class Magick::Image> > > >
   (_List_iterator<std::_List_val<Magick::Image\,std::allocator<Magick::Image> > > first_, _List_iterator<std::_List_val<Magick::Image\,std::allocator<Magick::Image
   > > > last_, Blob* blob_, Boolean adjoin_) in d:\dev\projects\ecs\layers\tools\imagemagicknet\include8\magick++\stl.h:line 2562

The source images

代码:

   void test()
   {
      list<Magick::Image> sourceImageList;
      Magick::Image image;

      image.read("d:\\imtest\\Montage\\1.jpg");
      sourceImageList.push_back(image);
      image.read("d:\\imtest\\Montage\\2.jpg");
      sourceImageList.push_back(image);
      image.read("d:\\imtest\\Montage\\3.jpg");
      sourceImageList.push_back(image);

      Magick::Color color("rgba(0,0,0,0)");

      Montage montageSettings;
      montageSettings.geometry("100x100-0-0");
      montageSettings.shadow(true);
      montageSettings.backgroundColor(color);
      montageSettings.tile( "3x1" );

      list<Magick::Image> montagelist;
      Magick::montageImages( &montagelist, sourceImageList.begin(), sourceImageList.end(), montageSettings);

      // This will give the expected result
      Magick::writeImages(montagelist.begin(), montagelist.end(), "d:\\imtest\\Montage\\out.png");

      Magick::Blob *b = new Magick::Blob();
      // This will throw an exception mentioned above
      Magick::writeImages(montagelist.begin(), montagelist.end(), b);
      Magick::Image imageFromBlob(*b);
      imageFromBlob.write("d:\\imtest\\Montage\\outBlob.png");

   }

【问题讨论】:

  • blob* b 未初始化并包含随机数据。你期待什么?
  • @MahmoudAl-Qudsi 谢谢!对不起,我复制了错误的行。见已编辑。
  • 感谢您的代码!这是我在 Magick++ 中找到的唯一一个蒙太奇图像的示例,而且非常有用!

标签: c++ imagemagick magick++ montage


【解决方案1】:

您应该为异常添加 try/catch 块,以便捕获并诊断异常(例如,将异常打印到 stderr 以便可以看到“what”字符串)。无法诊断未处理的异常。

[Magick::Exception] 详细介绍了处理 Magick++ 抛出的异常的正确方法。1

【讨论】:

    猜你喜欢
    • 2014-12-05
    • 1970-01-01
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    • 2012-03-10
    • 2014-12-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多