在C++中如何用一维数组表示三维数组

6
我希望将aFloat的字节值存储在一个1D数组中的每个3D坐标的pixelsArray中:
float aFloat = 1.0;
unsigned char* pixelsArray = new unsigned char[HEIGHT*WIDTH*3];

for (int i = 0; i < HEIGHT; i++)
{
   for (int j = 0; j < WIDTH; j++)
   {
      for (int k = 0; k < 3; k++)
      {
         pixelsArray[?] = aFloat;
      }
   }
}

“??”应该填什么?如果我没记错,索引中还需要有+ sizeof(float)

2个回答

9

您的内线需要是:

pixelsArray[(i * WIDTH + j) * 3 + k] = (unsigned char)(255.0 * aFloat);

这应该会给你一个全白的图像。

确保你的目标每个像素确实是三个字节而不是四个(包括透明通道或填充); 如果是四个字节,你只需要将上面的 3 改为 4


5

首先,让我们使用二维数组来完成这个任务:

0            1      ... W-1
W          W+1      ... 2*W-1
2*W      2*W+1      ... 3*W-1
  .           .     .       .
  .           .      .      .
  .           .       .     . 
(H-1)*W   (H-1)*W+1 ... H*W-1

所以您可以通过以下方式访问此内容:

unsigned char* array = new unsigned char[H*W];
for(int r=0;r<H;r++)
  for (int c=0; c<H; c++)
    array[r*w+c]=...;

在你的三维数组中,你会使用:
i*WIDTH*3 + j*3 + k

你不需要在任何地方使用sizeof(float),尽管你可能需要进行值转换,就像Mike DeSimone所建议的那样。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接