C ++表示一维数组中的3D数组

时间:2010-10-10 23:31:52

标签: c++ arrays mapping

我想在一维数组中为每个3D坐标存储aFloat的字节值(pixelArray):

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 个答案:

答案 0 :(得分:7)

你的内线必须是:

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

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

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

答案 1 :(得分: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建议的价值转换。