glReadPixels
glReadPixels (GLint x, GLint y, GLsizeiwidth, GLsizei height, GLenum format, GLenum type, GLvoid *pixels);
参数1,2:矩阵的左下角横、纵坐标(坐标以窗口最左下角为零,最右上角为最大值)。
参数3,4:矩阵的宽度、高度。
参数5: 读取的内容。例如:GL_RGB就会依次读取像素的红、绿、蓝三种数据,GL_RGBA则会依次读取像素的红、绿、蓝、alpha四种数据,GL_RED则只读取像素的红色数据(类似的还有GL_GREEN,GL_BLUE,以及GL_ALPHA)。如果采用的不是RGBA颜色模式,而是采用颜色索引模式,则也可以使用GL_COLOR_INDEX来读取像素的颜色索引。目前仅需要知道这些,但实际上还可以读取其它内容,例如深度缓冲区的深度数据等。
参数6: 读取的内容保存到内存时所使用的格式。例如:GL_UNSIGNED_BYTE会把各种数据保存为GLubyte,GL_FLOAT会把各种数据保存为GLfloat等。
参数7:表示一个指针,像素数据被读取后,将被保存到这个指针所表示的地址。
注:
1.需要保证该地址有足够的可以使用的空间,以容纳读取的像素数据。
2. glReadPixels实际上是从缓冲区中读取数据,如果使用了双缓冲区,则默认是从正在显示的缓冲(即前缓冲)中读取,而绘制工作是默认绘制到后缓冲区的。因此,如果需要读取已经绘制好的像素,往往需要先交换前后缓冲。
问题:
1.OpenGL常用的RGB像素数据与BMP文件的BGR像素数据顺序不一致
可以使用一些代码交换每个像素的第一字节和第三字节,使得RGB的数据变成BGR