2010-10-10 18 views
5

que desea almacenar el valor de byte de flote en pixelsArray para cada coordenada 3D, en una matriz de 1D:C++ En representación de una matriz 3D en una matriz de 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; 
     } 
    } 
} 

¿Qué pasaría en el ?? Creo que también necesita tener + sizeof(float) en algún lugar del índice si no me equivoco.

Respuesta

7

su línea interior necesita ser:

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

Esto debería dar una imagen totalmente blanca.

Asegúrese de que su objetivo sea realmente tres bytes por píxel y no cuatro (canal alfa o relleno); si es cuatro, solo tendrá que cambiar el 3 de arriba a 4.

+0

funciona perfecto, muchas gracias! :) – Steve

5

Vamos a hacer esto con una matriz de 2 dimensiones en primer lugar:

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 

por lo que tendría accesss esto con

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

En la matriz de 3 dimensiones, que tendría que utilizar

i*WIDTH*3 + j*3 + k 

No necesita un sizeof(float) en cualquier lugar, aunque es probable que necesite la conversión de valor que Mike DeSimone sugiere.

Cuestiones relacionadas