我正在使用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,所以我不确定发生了什么。
答案 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] << " ";
}
}