将图像缓冲区转换为文件流

时间:2011-06-21 05:25:36

标签: c++ image buffer filestream streambuf

之前可能会问过与此相似的事情,我无法找到问题的确切答案,决定在这里问一下。 我正在使用第三方框架,它有自己定义的类来处理图像文件。它只接受文件名,整个实现围绕能够打开这些文件流并执行读/写。 我想输入一个图像缓冲区(我通过之前打开的图像上的一些预处理获得)并将其提供给此框架。问题是我无法向其提供缓冲区,只有文件名字符串。

我正在寻找将缓冲区转换为文件流的最佳方法,以便它可以被搜索并被框架摄取。请帮我弄清楚我应该看什么。 我尝试阅读streambuf(filebuf和stringbuf)并尝试将缓冲区分配给这些类型,但到目前为止没有成功。

1 个答案:

答案 0 :(得分:1)

如果框架只采用文件名,则必须为其传递文件名。这意味着数据必须驻留在文件系统中。

便携式答案是“将您的数据写入临时文件并传递其名称”。

在Unix上,您可以使用命名管道并分叉另一个线程来通过管道提供数据......

但老实说,你最好只使用一个临时文件。如果你设法足够快地打开,读取和删除文件,那么它很可能永远不会出现在磁盘上,因为内核会缓存数据。

如果你能够使用ramdisk(tmpfs),你可以保证一切都在内存中发生。

[编辑]

还有一个想法。如果您可以修改代码库以便在std::iostream而非std::fstream上运行,则可以将其传递给std::stringstream。它们支持内存缓冲区上的所有常规iostream操作,包括搜索等内容。