2017-01-21 113 views
0

我想在OpenGL上保存窗口的所有RGB值。 並想檢查值爲'int'(因爲我必須使用它) 我試圖用for循環保存每個像素,它的工作原理。 但是,如果我試圖glReadpixels onece,它無法檢查。什麼問題?整個窗口的glReadPixels(OpenGL)

此代碼有效。 (正確保存像素RGB,我可以使用cout來檢查它)

int width = 50; 
int height = 50; 
for(int i=0; i<height; i++) 
{ 
    for(int j=0; j<width; j++) 
    { 
     unsigned char pick_col[3]; 
     glReadPixels(j , i , 1 , 1 , GL_RGB , GL_UNSIGNED_BYTE , pick_col); 
     cout << (int)pick_col[0] << " " << (int)pick_col[1] << " " << (int)pick_col[2] << endl; 
    } 
} 

但是這段代碼不起作用。 (在像素陣列中有奇怪的值,幾個值是正確的)

GLubyte pixelarray[width*height*3]; 
glReadPixels(0, 0, width, height, GL_RGB, GL_UNSIGNED_BYTE, pixelarray); 

for(int i=0; i<height; i++) 
{ 
    for(int j=0; j<width; j++) 
    { 
     cout << (int)pixelarray[i*width*3 + j*3] << " " (int)pixelarray[i*width*3 + j*3 +1] << " " << (int)pixelarray[i*width*3 + j*3+2] << endl; 
    } 
    cout << endl; 
} 
+3

確保['GL_PACK_ALIGNMENT'(https://www.opengl.org/sdk/docs/man/html/glPixelStore.xhtml)是否設置正確 – derhass

回答

0

我解決了問題。它應該是GL_RGBA和4通道陣列

GLubyte pixelarray[width*height*4]; 
glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, pixelarray); 

for(int i=0; i<height; i++) 
{ 
    for(int j=0; j<width; j++) 
    { 
     cout << (int)pixelarray[i*width*4 + j*4] << " "  (int)pixelarray[i*width*4 + j*4 +1] << " " << (int)pixelarray[i*width*4 + j*4+2]  << endl; 
    } 
    cout << endl; 
} 
+0

嘛。使用RGB也可以,因爲你可以設置正確的包裝對齊... – derhass