gpt4 book ai didi

c++ - 使用 boost.gil 逐像素读取 .png 文件

转载 作者:搜寻专家 更新时间:2023-10-31 02:17:49 24 4
gpt4 key购买 nike

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

包括:

#include <boost/gil/gil_all.hpp>
#include <boost/gil/extension/io/png_io.hpp>
#include <boost/gil/extension/io/png_dynamic_io.hpp>

内部函数:

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_NULL:png_io_private.hpp 中未声明的标识符)。我还尝试用以下内容替换 for_each_pixel

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 一起工作。我修改了第一段代码,现在出现与第二段相同的错误。

最佳答案

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

关于c++ - 使用 boost.gil 逐像素读取 .png 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35283096/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com