从framebuffer读取像素数据

时间:2015-04-24 05:56:13

标签: c++ qt opengl glreadpixels

我正在使用opengl在qt中编写一个接口,我有一个QGLWidget,它有一些顶点绘制到屏幕上。

我试图改变像素数据以使图像更亮但是glreadpixels会给出非常奇怪的结果

将像素读入三维数组,以便查看位置和RGB值。

这是我的一些代码

GLuint pixels[w][h][3];
glReadPixels( 0, 0, w, h, GL_RGB, GL_INT, pixels)

for(int i = 0; i < w; i++)
     for(int j = 0; j < h; j++)
         cout << pixels[i][j][0] << " ";
         cout << pixels[i][j][1] << " ";
         cout << pixels[i][j][2] << " ";

现在我的目标只是看到打印出的像素数据,但是我在终端输出的输出几乎都是0,但是当我看到0以外的东西时它非常大,如4294967295。

我知道颜色值的范围是0-255,所以我不确定发生了什么。

1 个答案:

答案 0 :(得分:4)

如果要将每个组件作为单独的元素存储在数组中,则数组应为GLubyte类型(范围0-255)。此外,请求的类型应为GL_UNSIGNED_BYTE

GLubyte pixels[w][h][3];
glReadPixels( 0, 0, w, h, GL_RGB, GL_UNSIGNED_BYTE, pixels);

for(int i = 0; i < w; i++)
{
     for(int j = 0; j < h; j++)
     {
         cout << +pixels[i][j][0] << " ";
         cout << +pixels[i][j][1] << " ";
         cout << +pixels[i][j][2] << " ";
     }
}