我正在使用Magick ++加载一些图片。因为我想为所有图像加载包装PhysFS,所以我需要通过blob而不是文件路径加载图像。
此代码:
Magick::Image test("path/to/some.png");
无问题地工作。
然而,一旦我做了一个blob,我得到一个例外:
PhysFS::ifstream img ("path/to/some.png");
Magick::Blob blob( img.rdbuf(), img.length() );
Magick::Image test(blob);
抛出的异常是:
以类型Magick :: ErrorMissingDelegate的未捕获异常终止 没有这种图像格式的解码委托`'@ error / blob.c / BlobToImage / 350
我已经验证blob与文件大小相同。所以我相信它正在将它读入内存。
我尝试使用标准库ifstream以及设置std :: ios :: binary但问题仍然存在。
答案 0 :(得分:2)
Magick :: Blob作为构造函数需要一个void *,换句话说就是一个从中读取数据的内存位置。但是您提供了指向std :: filebuf对象的指针,但这不起作用。您必须将文件读入内存。例如char *并在Blob构造函数中使用它。