Я использую 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
Я убедился, что размер блоба совпадает с размером файла. Так что я уверен, что он читает это в память.
Я попытался использовать стандартную библиотеку ifstream, также установив std :: ios :: binary, но проблема остается.
Magick :: Blob как конструктор нуждается в void *, другими словами, в ячейке памяти для чтения данных. Но вы предоставляете указатель на объект std :: filebuf, и это не сработает. Вам нужно будет прочитать файл в память. Например, char * и использовать его в конструкторе Blob.