【发布时间】:2010-07-20 15:11:13
【问题描述】:
如何在 C++ 中仅将 char 缓冲区中的每三个项目写入文件以快速归档?
我从相机中获得了三通道图像,但每个通道都包含相同的信息(图像是灰度的)。我只想将一个通道写入磁盘以节省空间并加快写入速度,因为这是实时数据收集系统的一部分。
C++ 的 ofstream::write 命令似乎只写入连续的二进制数据块,所以我当前的代码写入所有三个通道并且运行速度太慢:
char * data = getDataFromCamera();
int dataSize = imageWidth * imageHeight * imageChannels;
std::ofstream output;
output.open( fileName, std::ios::out | std::ios::binary );
output.write( data, dataSize );
我希望能够用如下调用替换最后一行:
int skipSize = imageChannels;
output.write( data, dataSize, skipSize );
其中 skipSize 会导致 write 仅将三分之一放入输出文件。但是,我找不到任何可以执行此操作的函数。
我很想听听有关将单个频道快速写入磁盘的任何想法。 谢谢。
【问题讨论】:
-
通道数据是交错的还是连续的?也就是模式是123123123123还是111222333111222?
-
我打赌交错。
-
是的,它是交错的 - 123123123
-
添加一个带有 codecvt facet 的 local,它只将每三个字节写入缓冲区。一旦您编写了构面,您就可以为任何流注入区域设置,并且它只会查看每三个字节。详情见下文。