0

我正在使用 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 但问题仍然存在。

4

1 回答 1

2

Magick::Blob 作为构造函数需要一个 void*,换句话说就是一个从中读取数据的内存位置。但是您提供了指向 std::filebuf 对象的指针,但这不起作用。您必须将文件读入内存。例如 char* 并在 Blob 构造函数中使用它。

于 2015-06-19T12:54:19.547 回答