Я пытаюсь прочитать изображение из памяти с помощью boost::gil
присутствует в бусте 1,53. Я взял следующие строки из примера, взятого из Интернета:
#include <boost/gil/gil_all.hpp>
boost::gil::rgb8_image_t img;
boost::gil::image_read_settings<jpeg_tag> readSettings;
boost::gil::read_image(mystream, img, readSettings);
За исключением первой строки, тип и функция в остальных строках не могут быть найдены в boost::gil
namespace, поэтому я не могу проверить, соответствуют ли приведенные выше строки тому, что я хочу. У вас есть идеи, где взять необходимые типы и функции?
Смотрите новую версию GIL здесь: GIL стабильная версия
Работает хорошо и стабильно.
using namespace boost::gil;
image_read_settings<jpeg_tag> readSettings;
rgb8_image_t newImage;
read_image(stream, newImage, readSettings);
Ваш код кажется правильным.
Boost 1.68, который является планируется к выпуску 8 августа 2018 года, наконец доставит новый Boost.GIL IO (он же IOv2) рассмотрены и приняты давно.
Уже доступно с текущего master
ветка супер-проекта Boost (проверьте Boost.GIL CONTRIBUTING.md руководство по работе с супер-проектом).
Теперь вы можете использовать GIL из Boost 1.68 или новее, вот пример, который показывает, как читать изображение из входного потока. Это не должен быть файловый поток, но любой std::istream
совместимый поток должен работать.
#include <boost/gil.hpp>
#include <boost/gil/io/io.hpp>
#include <boost/gil/extension/io/jpeg.hpp>
#include <fstream>
#include <iostream>
int main(int argc, char* argv[])
{
if (argc != 2)
{
std::cerr << "input jpeg file missing\n";
return EXIT_FAILURE;
}
try
{
std::ifstream stream(argv[1], std::ios::binary);
namespace bg = boost::gil;
bg::image_read_settings<bg::jpeg_tag> read_settings;
bg::rgb8_image_t image;
bg::read_image(stream, image, read_settings);
return EXIT_SUCCESS;
}
catch (std::exception const& e)
{
std::cerr << e.what() << std::endl;
}
return EXIT_FAILURE;
}