VS平台下 OpenGL glReadPixels、glDrawPixels、glCopyPixels函数

本文介绍了在Visual Studio环境下,OpenGL中的glReadPixels、glDrawPixels和glCopyPixels函数的使用。glReadPixels用于从缓冲区读取像素数据,glDrawPixels用于绘制像素,glCopyPixels则用于复制像素。文章讨论了RGB与BMP文件格式的像素顺序不一致问题以及BMP文件的对齐影响,并提供了相应的解决方案。同时,给出了使用这些函数的示例代码。
摘要由CSDN通过智能技术生成

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值