【问题标题】:C++ Representing a 3D array in a 1D arrayC++ 在 1D 数组中表示 3D 数组
【发布时间】:2011-04-23 14:11:53
【问题描述】:

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

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)

【问题讨论】:

    标签: c++ arrays mapping


    【解决方案1】:

    你的内线需要是:

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

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

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

    【讨论】:

      【解决方案2】:

      让我们先用一个二维数组来做:

      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]=...;
      

      在您的 3 维数组中,您会使用

      i*WIDTH*3 + j*3 + k
      

      您在任何地方都不需要sizeof(float),尽管您可能需要Mike DeSimone 建议的值转换。

      【讨论】:

        猜你喜欢
        • 2022-01-16
        • 1970-01-01
        • 2013-01-08
        • 1970-01-01
        • 1970-01-01
        • 2018-12-03
        • 1970-01-01
        • 2017-08-22
        • 2020-04-22
        相关资源
        最近更新 更多