2013-02-12 65 views
2

我有一個蒙太奇,當指定目標路徑時我可以將它保存到磁盤。但是,當我嘗試將它保存到Blob時,它會失敗。使用Magick將蒙太奇保存爲Blob ++

我是否缺少一些設置?

版本:ImageMagick的6.8.2-5 2013年2月5日Q8

機:Windows 7的64位

編輯:異常:

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"); 

    } 
+0

'blob * b'未初始化幷包含隨機數據。你能指望什麼? – 2013-02-12 08:41:00

+0

@ MahmoudAl-Qudsi謝謝!對不起,我複製了錯誤的行。見編輯。 – jani 2013-02-12 08:51:39

回答

1

您應該爲異常添加try/catch塊,以便捕獲異常並進行診斷(例如,打印stderr的異常,以便可以看到「what」字符串)。診斷未處理的異常是不可能的。

處理從Magick ++拋出的異常的正確方法詳見[Magick :: Exception]。 1