首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用.png逐点读取boost.gil文件

使用.png逐点读取boost.gil文件
EN

Stack Overflow用户
提问于 2016-02-09 02:49:27
回答 1查看 1.7K关注 0票数 2

我尝试使用Using Boost.GIL to convert an image into “raw” bytes中的以下代码将png文件转换为原始位(稍后由OpenGL使用),

包括:

代码语言:javascript
复制
#include <boost/gil/gil_all.hpp>
#include <boost/gil/extension/io/png_io.hpp>
#include <boost/gil/extension/io/png_dynamic_io.hpp>

内部功能:

代码语言:javascript
复制
boost::gil::rgba8_image_t image;
png_read_and_convert_image(path, image);

unsigned char* data = new unsigned char[image.width() * image.height() *
    boost::gil::num_channels<boost::gil::rgba8_pixel_t>()];
std::size_t i = 0;

auto lambda = [data, &i](boost::gil::rgba8_pixel_t p)
    {
        data[i] = boost::gil::at_c<0>(p); ++i;
        data[i] = boost::gil::at_c<1>(p); ++i;
        data[i] = boost::gil::at_c<2>(p); ++i;
        data[i] = boost::gil::at_c<3>(p); ++i;
    };
boost::gil::for_each_pixel(image._view,    std::function<void(boost::gil::rgba8_pixel_t)>(lambda));

其中给出了std::string path。但这不能编译。(int_p_NULLpng_io_private.hpp中未声明的标识符)。我还尝试用以下方法替换for_each_pixel

代码语言:javascript
复制
for (int x = 0; x < image.width(); ++x)
{
    boost::gil::rgba8_view_t::y_iterator it = image._view.col_begin(x);
    for (int y = 0; y < image.height(); ++y)
    {
        data[i] = boost::gil::at_c<0>(it[y]); ++i;
        data[i] = boost::gil::at_c<1>(it[y]); ++i;
        data[i] = boost::gil::at_c<2>(it[y]); ++i;
        data[i] = boost::gil::at_c<3>(it[y]); ++i;
    }
}

这段代码也不会编译,也会产生同样的错误。要正确读取.png图像,我应该做什么?

编辑: @cv_and_he指出,lambda不能自然地与boost.gil一起工作。我修改了第一段代码,现在它给出了与第二段相同的错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-09 03:12:30

int_p_NULL是在libpng -1.2.x/ png.h中定义的;确保您已经直接或间接地包含了png.h,并且没有使用更新版本的libpng。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35283096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档