C ++ Представление трехмерного массива в одномерном массиве - PullRequest
5 голосов
/ 11 октября 2010

Я хочу сохранить значение байта aFloat в элементах pixArray для каждой трехмерной координаты в одномерном массиве:

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 ]

7 голосов
/ 11 октября 2010

Ваша внутренняя линия должна быть:

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

Это должно дать вам полностью белое изображение.

Убедитесь, что ваша цель на самом деле составляет три байта на пиксель, а не четыре (альфа-канал или заполнение); если это четыре, вам просто нужно изменить 3 выше на 4.

5 голосов
/ 11 октября 2010

Давайте сначала сделаем это с двумерным массивом:

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) нигде, хотя вам, вероятно, нужно преобразование значений, которое Майк ДеСимоне предлагает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...