使用Boost.GIL创建图像

16

我一直在尝试阅读boost::gil文档,但文档有些缺乏和复杂。

抱怨归抱怨,我需要一个关于如何完成以下任务的示例:

创建一个512x512像素的图像。将其填充为红色像素。写入PNG文件。

我在gil文档中找不到任何关于创建图像或填充像素部分的内容。

如果有人能提供帮助,感谢您。


1
当我第一次接触GIL时,我也遇到了同样的问题(甚至在它加入boost之前)...教程材料向你展示了大量关于视图类型的巧妙技巧...但是当你尝试自己实践时,你会意识到你仍然没有任何想法如何为视图创建一个具体的图像!无论如何,坚持下去,这确实是一个处理图像的非常优雅的库。 - timday
@timday 一些不错的评论。我们正在努力改进 GIL,包括文档。如果你发现问题或有评论,请考虑在 https://github.com/boostorg/gil 上开个问题。 - mloskot
1个回答

28

我还没有使用过GIL,但是我也想学习它。查看了设计指南并通过谷歌搜索与libpng相关的错误,看起来最简单的示例是:

#define png_infopp_NULL (png_infopp)NULL
#define int_p_NULL (int*)NULL
#include <boost/gil/gil_all.hpp>
#include <boost/gil/extension/io/png_dynamic_io.hpp>
using namespace boost::gil;
int main()
{
    rgb8_image_t img(512, 512);
    rgb8_pixel_t red(255, 0, 0);
    fill_pixels(view(img), red);
    png_write_view("redsquare.png", const_view(img));
}

在命令行使用-lpng时,对我有效,并生成这个图像

输入图像描述


非常简单而有效的解决方案。谢谢提醒关于libpng错误的问题。我发现在Visual C++中,我必须包含库和目录,还有其他一些不在其文档中的信息:p - Brian
8
针对未来可能想要控制每个像素颜色的读者:只需获取图像的视图(rgb8_image_t::view_t v = view(img)),并在其上设置像素:v(10,20) = rgb8_pixel_t(255, 0, 123)。或者按照文档中的例子,在视图上使用迭代器进行操作。 - Arthur
2
@cubbi 给出的答案对于在 Boost 1.67 或更早版本中发布的 GIL 完全正确。由于在 Boost 1.68 中发布的 Boost.GIL 中 I/O 扩展已被完全重写,因此该示例需要做出调整。如有任何问题,请随时访问 https://github.com/boostorg/gil#community 进行咨询。 - mloskot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接