我有一个关于使用 C++ 快速写入文件的快速问题。我正在处理灰度彩色图像,因此我在数组中为图像的每个 x、y 位置存储一个 8 位值(范围从 0-255)。
但是,在读入这些值后,我需要将它们写成 RGB 格式,从而为每个 x,y 位置存储 3、8 位值。直观的做法是在移动到下一个值之前连续写入每个值 3 次。
这是我正在做的示例代码:
for(int f = 0; f < totalFrames; f++){
for(int i = 0; i < imageSize; i++){
int index = i +(f*320*240);
myFile << pixelBuffer[index];
myFile << pixelBuffer[index];
myFile << pixelBuffer[index];
}
}
如果数组中的值都是连续存储的,我可以简单地使用:
myFile.write((const char*)pixelBuffer, totalFrames * imageSize);
但事实并非如此,所以我想知道是否有一种方法可以偏移我写入每个值的位置,这样我就可以每帧进行三个写入调用,而不是 imageSize*3 写入。
最佳答案
要么将数据传输到一个用于写入的数组,要么使用内存映射 IO(如果您使用的是 Windows CreateFileMapping
和 MapViewOfFileEx
,Linux/Mac 使用mmap
).
using pixel_t = /* what type is your data? */;
pixel_t* writeBuffer = new pixel_t[imageSize];
pixel_t* writePtr = writeBuffer;
for(size_t f = 0; f < totalFrames; f++){
for(size_t i = 0; i < imageSize; i++){
const size_t index = i + (f * 320 * 240);
const pixel_t data = pixelBuffer[index];
*writePtr++ = data;
*writePtr++ = data;
*writePtr++ = data;
}
myFile.write((const char*)writeBuffer, imageSize);
}
delete[] writeBuffer;
使用内存映射 IO,您可以做几乎相同的事情,只是不需要“write”语句。
关于c++ - 快速写入数组中的重复值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25123969/