使用 boost.gil 逐像素读取.png文件
Reading .png files pixel-by-pixel using boost.gil
我尝试使用"Boost.GIL"中的以下代码将图像转换为"原始"字节,以将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指出lambdas不能自然地与boost.gil一起工作。我已经修改了第一段代码,它现在给出了与第二段代码相同的错误。
int_p_NULL在
libpng-1.2.x/png.h中定义;请确保直接或间接包含png.h,并且没有使用较新版本的libpng。
相关文章:
- 理解boost::asio-async_read在无需读取内容时的行为
- 使用新行和不使用新行读取文件
- 读取文件并输入到矢量中
- 用c++从输入文件中读取另一行
- 读取文件的最后一行并输入到链接列表时出错
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 无法找到/读取配置文件.conf-FileIOException
- 如何使用Luacneneneba API正确读取字符串和表参数
- C++将文本文件中的数据读取到结构数组中
- 正在将csv文件读取为双精度矢量
- 为什么 sscanf 无法从一个字符串中读取uint64_t和字符?
- 为什么在读取文件大小时文件IO速度会发生变化
- 正在读取二进制文件(is_open)
- 如何在c++中从文本文件中逐行读取整数
- 从 cin 读取 PNG 文件
- 用C或C++读取/写入BMP/PNG灰度图像
- PNG 块读取器,长度无效
- 使用 boost.gil 逐像素读取.png文件
- 读取尺寸大于200x200像素的png图像时,0x77662D37(ntdll.dll)处出现未处理的异常
- 需要从png文件中读取数据并将其保存到新文件中,如何?C++