2010-10-10 8 views
5

Я хочу, чтобы сохранить значение в байтах, плывущего в pixelsArray для каждого 3D координат, в 1D массив:C++ Представляя 3D-массив в 1D массив

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) где-то в индексе, если я не ошибаюсь.

ответ

7

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

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

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

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

+0

работает отлично, спасибо огромное! :) – Steve

5

Давайте делать это с помощью 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 

Таким образом, вы бы Accesss это с

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 предлагает.

Смежные вопросы