我试图将图像从相机写入磁盘。为了使下游后处理变得简单,我们选择使用CSV格式(其他系统我们使用这种格式而不是二进制格式)。问题是写一个1MB的图像需要大约1秒钟。
我希望将此速度提高至少10倍。理想情况下,我们维护CSV格式,但如果需要,我们可以移动到二进制文件。这一切都在WIN 10机器上运行,并使用VS 2017进行编译。
以下代码效率低下,但打印出的矩形图像是','像素之间的描绘。我确信99%的低效率来自每个循环的百万次重复IO请求,但我不确定如何追加','没有这样的东西......
int toCSV(uns16 * bufferCopy, uns32 bufsize, uns32 imgWidth, string directory, string fileout)
{
std::ofstream outputFile(directory + fileout);
for (uns32 i = 0; i < bufsize; i++)
{
outputFile << (bufferCopy[i]);
if (i % (imgWidth+1) < imgWidth)
outputFile << ",";
else
outputFile << "\n";
}
outputFile.close();
return 0;
}
输出的示例如下所示(只需~400x~600行):
32.323,23.456,54.323,45.332
45.343,73.846,35.328,15.842
32.323,23.456,54.323,45.332
45.343,73.846,35.328,15.842
更新
如果我转到二进制格式,我将使用以下问题作为参考代码: Writing a binary file in C++ very fast