如何使用Boost::GIL将图像保存为JPEG或PNG到char*中?

4

我看到很多关于将数据保存至文件的样例,但我想知道是否可以将数据保存在char*或string中,而不是保存在文件中,也就是说保留在内存中?


1
所以你的意思是一个原始的内存缓冲区,代表了一个JPEG或PNG编码的图像? - Christian Rau
@Christian Rau:一个原始的内存缓冲区,其中包含一个JPEG或PNG编码的图像。 - Rella
GIL有办法复制已经存在于内存中的图像(http://www.boost.org/doc/libs/1_47_0/libs/gil/doc/html/giltutorial.html#InterfaceSec,图像和图像视图之间的区别)。您希望从将内存中的不同副本制作成字节包中获得什么? - Max Lybbert
2
@Max Lybbert - 举个例子,你可以使用它通过HTTP生成PNG字节流,以便在不写入磁盘的情况下实现动态生成图片。 - clstrfsck
@Max Lybbert:一般来说,我想做 msandiford 建议的事情=) - Rella
2个回答

7
boost本身似乎没有任何东西可以促进这一点。所有的I/O似乎都是基于提供文件名的。
然而,似乎有一个称为io_new的扩展here,它具有基于流的I/O。
请参见文档here中的示例(搜索“在内存缓冲区中读写”)。

我可以确认在boost主线版本中这是不可能的。我最终使用了ImageMagick,但它比我预期的要重。io_new或直接使用libpng是更清晰的解决方案。 - totowtwo
1
请注意,io_new 的作者实际上是 Boost.GIL 的维护者,因此代码质量肯定很高(他上个月在 Boost ML 上发布了请求将 io_new 合并到主线 Boost 中的帖子;不确定那方面的进展如何)。 - ildjarn

1
Boost.GIL v1.75:阅读这份文档中的章节“在内存缓冲区中读写”,似乎boost::gil::write_view(...)也可以写入内存缓冲区。 还请参考这个问题

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