2017-01-21 10 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

関連する問題