2

我正在尝试使用boost::gilboost 1.53 中的 present 从内存中读取图像。我从互联网上的一个例子中提取了以下几行:

#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命名空间中都找不到,所以我无法测试上面的行是否符合我的要求。您知道从哪里获得所需的类型和功能吗?

4

2 回答 2

3

在此处查看 gil 的新版本:gil stable version

它运行良好且稳定。

using namespace boost::gil;
image_read_settings<jpeg_tag> readSettings;
rgb8_image_t newImage;
read_image(stream, newImage, readSettings);

您的代码似乎正确。

于 2013-04-28T07:44:41.900 回答
3

Boost 1.68计划于 2018 年 8 月 8 日发布,最终将交付新的 Boost.GIL IO(又名 IOv2)很久以前就已经审核并接受了。它已经可以从masterBoost 超级项目的当前分支获得(查看 Boost.GIL CONTRIBUTING.md以获取如何使用超级项目的指南)。

现在,您可以使用 Boost 1.68 或更高版本的 GIL,这里是展示如何从输入流中读取图像的示例。它不必是基于文件的流,但任何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;
}
于 2018-07-25T18:54:21.610 回答