gpt4 book ai didi

c++ - 快速写入数组中的重复值

转载 作者:太空宇宙 更新时间:2023-11-04 15:39:56 25 4
gpt4 key购买 nike

我有一个关于使用 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 CreateFileMappingMapViewOfFileEx,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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com