2010-10-10 17 views
5

मैं प्रत्येक के लिए pixelsArray में बचाए की बाइट मूल्य संग्रहीत करना चाहते हैं 3D समन्वय में एक 3 डी सरणी प्रतिनिधित्व करते हुए, एक 1 डी सरणी में:सी ++ एक -1 डी सरणी

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); 

यह आपको एक सब सफेद छवि देना चाहिए।

सुनिश्चित करें कि आपका लक्ष्य वास्तव में तीन बाइट प्रति पिक्सेल है और चार (अल्फा चैनल या पैडिंग) नहीं है; यदि यह चार है, तो आपको केवल को 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 

तो तुम

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-आयामी सरणी में साथ इस accesss हैं आप उपयोग करेंगे

i*WIDTH*3 + j*3 + k 

आपको कहीं भी sizeof(float) की आवश्यकता नहीं है, हालांकि आपको शायद मूल्य रूपांतरण की आवश्यकता है Mike DeSimone सुझाव देता है।

संबंधित मुद्दे