2010-10-10 11 views
5

Je veux stocker la valeur d'octet de aFloat dans pixelsArray pour chaque coordonnée 3D, dans un tableau 1D:C++ qui représente un tableau 3D dans un tableau 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; 
     } 
    } 
} 

Que irait dans le ?? Je pense qu'il doit également avoir + sizeof(float) quelque part dans l'index si je ne me trompe pas.

Répondre

7

Votre ligne intérieure doit être:

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

Cela devrait vous donner une image tout blanc. Assurez-vous que votre cible est réellement trois octets par pixel et non quatre (canal alpha ou remplissage); s'il est quatre, vous devrez juste changer le 3 ci-dessus en 4.

+0

fonctionne parfaitement, merci beaucoup! :) – Steve

5

Faisons cela avec un tableau à 2 dimensions d'abord:

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 

Donc, vous accesss cela avec

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

Dans votre tableau 3 dimensions, vous utiliseriez

i*WIDTH*3 + j*3 + k 

Vous n'avez pas besoin de sizeof(float) partout, bien que vous ayez probablement besoin de la conversion de valeur Mike DeSimone suggère.