glReadPixels 函数

GlReadPixels 函数从帧缓冲区读取像素块。

语法

void WINAPI glReadPixels(
   GLint   x,
   GLint   y,
   GLsizei width,
   GLsizei height,
   GLenum  format,
   GLenum  type,
   GLvoid  *pixels
);

参数

x

从帧缓冲区读取的第一个像素的窗口 x 坐标。 与 y 坐标一起,指定矩形像素块左下角的位置。

y

从帧缓冲区读取的第一个像素的窗口 y 坐标。 与 x 坐标一起,指定矩形像素块左下角的位置。

width

像素矩形的宽度。

height

像素矩形的高度。 值 "1" 的 宽度高度 参数对应于一个像素。

format

像素数据的格式。 接受以下符号值:

含义
总帐 _ 颜色 _ 索引
颜色索引是从 glReadBuffer选择的颜色缓冲区中读取的。 每个索引都将转换为固定点,将其向左或向右移动,具体取决于总帐索引班次的值和符号以及 _ _ 添加到总帐 _ 索引 _ 偏移量。 如果 GL _ 映射 _ 颜色为 gl _ TRUE,则索引将被其在表中的映射 _ _ _ i _ 到 _ i 的表中。
总帐 _ 模具 _ 索引
模具值是从模具缓冲区中读取的。 每个索引都将转换为固定点,将其向左或向右移动,具体取决于总帐索引班次的值和符号以及 _ _ 添加到总帐 _ 索引 _ 偏移量。 如果 gl _ 映射 _ 模具为 gl _ TRUE,则在表中,将索引的表中的映射中的索引替换 _ _ 为 s _ _ _ 。
总帐 _ 深度 _ 组件
从深度缓冲区读取深度值。 每个组件都转换为浮点型,以便最小深度值映射到0.0,最大值映射到1.0。 然后,将每个组件乘以总帐 _ 深度 _ 刻度,并将其添加到 gl _ 深度 _ 偏差,最后将限制为范围 [ 0,1 ] 。
总帐 _ 红色,总帐 _ 绿色,GL _ 蓝色,GL _ ALPHA,GL _ RGB,GL _ RGBA,GL _ BGR _ EXT,GL _ BGRA _ EXT,GL _ 亮度,GL _ 亮度 _ ALPHA
根据颜色缓冲区存储颜色索引还是 RGBA 颜色组件,处理会有所不同。 如果存储颜色索引,则从 glReadBuffer选择的颜色缓冲区中读取它们。 每个索引都将转换为固定点,将其向左或向右移动,具体取决于总帐索引班次的值和符号以及 _ _ 添加到总帐 _ 索引 _ 偏移量。 然后,索引将被替换为通过对 GL 象素映射 i 进行索引获得的红色、绿色、蓝色和 alpha 值,并将其从总帐像素映射 i 到 G,gl 像素映射 i _ _ _ _ _ _ _ _ _ _ _ _ _ _ 到 _ B,并 _ 将 gl 像素 _ 映射 _ i 替换 _ 为 _ 表格。 如果 RGBA 颜色组件存储在颜色缓冲区中,则从 glReadBuffer 选择的颜色缓冲区中读取它们。 每个颜色组件都转换为浮点型,以使零强度映射到0.0,并将完全强度映射到1.0。 然后,每个组件乘以 GL _ c _ 小数位数,并添加到 gl _ c _ 偏向,其中 c 为 gl _ 红色,gl 为 _ 绿色,gl 为 _ 蓝色,gl 为 _ ALPHA。 每个组件的限制范围为 [ 0 到 1 ] 。 最后,如果总帐 _ 映射 _ 颜色为 gl _ TRUE,则会将每个颜色分量 c 替换为其在表总帐 _ 像素 _ 映射 c 到 c 中的映射 _ _ _ ,其中,c 再次为 gl _ RED,gl _ 绿色,gl _ 蓝,gl _ ALPHA。 在执行查找之前,每个组件都将缩放到其对应表的大小。 最后,放弃不需要的数据。 例如,GL _ RED 会丢弃绿色、蓝色和 alpha 分量,而 gl _ RGB 只会丢弃 alpha 分量。 总帐 _ 亮度会将单个分量值计算为红色、绿色和蓝色分量的总和,而总帐 _ 亮度 _ ALPHA 会执行相同的计算,同时将 ALPHA 作为另一个值。

type

像素数据的数据类型。 必须是以下值之一。

类型 索引掩码 组件转换
总帐 _ 无符号 _ 字节 281 (281) c
总帐 _ 字节 271 [ (271) c-1 ] /2
总帐 _ 位图 1 1
总帐 _ 无符号 _ 简短 2 61 (2 61) c
GL _ SHORT 2 51 [ (2 51) c 1 ] /2
总帐 _ 无符号 _ INT_ 2 1 (2 1) c
总帐 _ INT 2 1 [ (2 1) c 1 ] /2
总帐 _ 浮点 c

像素

返回像素数据。

返回值

此函数不返回值。

错误代码

GlGetError函数可以检索以下错误代码。

名称 含义
总帐 _ 无效 _ 枚举
格式类型 不是接受的值。
总帐 _ 无效 _ 值
宽度高度 均为负数。
总帐 _ 无效 _ 操作
format 为 GL _ 颜色 _ 索引,颜色缓冲区存储了 RGBA 或 BGRA 颜色组件。
总帐 _ 无效 _ 操作
format 为 GL _ 模具 _ 索引,没有模具缓冲区。
总帐 _ 无效 _ 操作
format 为 GL _ 深度 _ 组件,没有深度缓冲区。
总帐 _ 无效 _ 操作
调用 glBegin 和对 glEnd的相应调用之间调用了函数。

备注

GlReadPixels 函数从帧缓冲区中返回像素数据,从其左下角位置 (xy) 位置的像素开始,到从位置 像素 开始的客户端内存。 几个参数在将像素数据放置到客户端内存中之前控制对其进行处理。 这些参数设置了以下三个命令: glPixelStoreglPixelTransferglPixelMap。 本主题描述对大多数(但不是由这三个命令指定的所有参数) glReadPixels 的影响。

GlReadPixels 函数返回 (x + i、 y + j) 的每个像素的值,0 = i < width ,0 = j <高度。 此像素被称为第 j 行中的第 i 个像素。 每行的行顺序从最小行到最大行从左至右返回到最大行。

上面所述的移位、小数位数、偏向和查找系数都由 glPixelTransfer指定。 查找表内容由 glPixelMap指定。

最后一个步骤涉及将索引或组件转换为正确的格式,如 type 所指定。 如果 format 为 gl _ COLOR _ index 或总帐 _ 模具 _ 索引,并且 类型 不是总帐 _ 浮点,则每个索引将用下表中给出的掩码值屏蔽。 如果 type 为 GL _ FLOAT,则每个整数索引都转换为单精度浮点格式。

如果 format 为 gl _ RED,GL _ 绿色,gl _ 蓝,gl _ ALPHA,GL _ RGB,GL _ RGBA,GL _ BGR _ EXT,gl _ BGRA _ EXT,gl _ 亮度,或总帐 _ 明亮度 _ ALPHA,而 类型 不是总帐 _ ,则每个组件乘以上表中显示的乘数。 如果 type 为 GL _ FLOAT,则每个组件都将作为 (传递,或转换为客户端的单精度浮点格式(如果与 OpenGL) 使用的格式不同)。

返回值放置在内存中,如下所示。 如果 format 为 gl _ 颜色 _ 索引,总帐 _ 模具 _ 索引,总帐 _ 深度 _ 组件,gl _ 红色,gl _ 绿色,gl _ 蓝色,gl _ ALPHA 或 gl _ 亮度,则返回单个值,而 j 中第一条像素的数据放置在 (j ) width i 中 位置 + 。 总帐 _ RGB 和 gl _ BGR _ ext 返回三个值,GL _ RGBA 和 gl _ BGRA _ EXT 返回四个值,总帐 _ 亮度 _ ALPHA 返回每个像素的两个值,所有值对应于占用连续空间的单个像素(以 像素为单位)GlPixelStore设置的存储参数(如总帐 _ 包 _ 交换 _ 字节和总帐 _ 包 _ LSB _ )会影响数据写入内存的方式。 有关说明,请参阅 glPixelStore

不确定位于连接到当前 OpenGL 上下文的窗口外部的像素的值。

如果生成错误,则不会对 像素 内容进行任何更改。

以下函数检索与 glReadPixels 相关的信息:

带参数 GL _ 索引 _ 模式的 glGet

要求

要求
最低受支持的客户端
Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器
Windows 2000 Server [仅限桌面应用]
标头
Gl。h

Opengl32
DLL
Opengl32.dll

请参阅

glBegin

glCopyPixels

glDrawPixels

glEnd

glPixelMap

glPixelStore

glPixelTransfer

glReadBuffer