Función glReadPixels

La función glReadPixels lee un bloque de píxeles del framebuffer.

Sintaxis

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

Parámetros

x

Coordenada x de la ventana del primer píxel que se lee del búfer de fotogramas. Junto con la coordenada y , especifica la ubicación de la esquina inferior izquierda de un bloque rectangular de píxeles.

y

Coordenadas y de la ventana del primer píxel que se lee desde el búfer de fotogramas. Junto con la coordenada x , especifica la ubicación de la esquina inferior izquierda de un bloque rectangular de píxeles.

width

Ancho del rectángulo de píxeles.

height

Alto del rectángulo de píxeles. Los parámetros de ancho y alto del valor "1" corresponden a un solo píxel.

format

Formato de los datos de píxeles. Se aceptan los siguientes valores simbólicos:

Valor Significado
GL_COLOR_INDEX
Los índices de color se leen del búfer de color seleccionado por glReadBuffer. Cada índice se convierte en un punto fijo, se desplaza a la izquierda o a la derecha, según el valor y el signo de GL_INDEX_SHIFT, y se agrega a GL_INDEX_OFFSET. Si GL_MAP_COLOR es GL_TRUE, los índices se reemplazan por sus asignaciones en el GL_PIXEL_MAP_I_TO_I de la tabla.
GL_STENCIL_INDEX
Los valores de galería de símbolos se leen desde el búfer de galería de símbolos. Cada índice se convierte en un punto fijo, se desplaza a la izquierda o a la derecha, según el valor y el signo de GL_INDEX_SHIFT, y se agrega a GL_INDEX_OFFSET. Si GL_MAP_STENCIL es GL_TRUE, los índices se reemplazan por sus asignaciones en el GL_PIXEL_MAP_S_TO_S de la tabla.
GL_DEPTH_COMPONENT
Los valores de profundidad se leen desde el búfer de profundidad. Cada componente se convierte en punto flotante de modo que el valor de profundidad mínimo se asigna a 0,0 y el valor máximo se asigna a 1,0. A continuación, cada componente se multiplica por GL_DEPTH_SCALE, se agrega a GL_DEPTH_BIAS y, por último, se sujeta al intervalo [0,1].
GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA, GL_RGB, GL_RGBA, GL_BGR_EXT, GL_BGRA_EXT, GL_LUMINANCE, GL_LUMINANCE_ALPHA
El procesamiento difiere en función de si los búferes de color almacenan índices de color o componentes de color RGBA. Si se almacenan índices de color, se leen del búfer de color seleccionado por glReadBuffer. Cada índice se convierte en un punto fijo, se desplaza a la izquierda o a la derecha, según el valor y el signo de GL_INDEX_SHIFT, y se agrega a GL_INDEX_OFFSET. A continuación, los índices se reemplazan por los valores rojo, verde, azul y alfa obtenidos mediante la indexación de las tablas GL_PIXEL_MAP_I_TO_R, GL_PIXEL_MAP_I_TO_G, GL_PIXEL_MAP_I_TO_B y GL_PIXEL_MAP_I_TO_A. Si los componentes de color RGBA se almacenan en los búferes de color, se leen del búfer de color seleccionado por glReadBuffer. Cada componente de color se convierte en punto flotante, de modo que la intensidad cero se asigna a 0,0 y la intensidad completa se asigna a 1,0. A continuación, cada componente se multiplica por GL_c_SCALE y se agrega a GL_c_BIAS, donde c es GL_RED, GL_GREEN, GL_BLUE y GL_ALPHA. Cada componente se sujeta al intervalo [0,1]. Por último, si GL_MAP_COLOR es GL_TRUE, cada componente de color c se reemplaza por su asignación en la tabla GL_PIXEL_MAP_c_TO_c, donde c de nuevo es GL_RED, GL_GREEN, GL_BLUE y GL_ALPHA. Cada componente se escala al tamaño de su tabla correspondiente antes de realizar la búsqueda. Por último, se descartan los datos innecesarios. Por ejemplo, GL_RED descarta los componentes verde, azul y alfa, mientras que GL_RGB descarta solo el componente alfa. GL_LUMINANCE calcula un único valor de componente como la suma de los componentes rojo, verde y azul, y GL_LUMINANCE_ALPHA hace lo mismo, manteniendo alfa como segundo valor.

type

Tipo de datos de los datos de píxeles. Debe ser uno de los siguientes valores:

Tipo Máscara de índice Conversión de componentes
GL_UNSIGNED_BYTE 281 (281) C
GL_BYTE 271 [(271)c-1]/2
GL_BITMAP 1 1
GL_UNSIGNED_SHORT 2 61 (2 61) C
GL_SHORT 2 51 [(2 51)c1]/2
GL_UNSIGNED_INT_ 2 1 (2 1) C
GL_INT 2 1 [(2 1)c1]/2
GL_FLOAT ninguno c

Píxeles

Devuelve los datos de píxeles.

Valor devuelto

Esta función no devuelve ningún valor.

Códigos de error

La función glGetError puede recuperar los siguientes códigos de error.

Nombre Significado
GL_INVALID_ENUM
format o type no era un valor aceptado.
GL_INVALID_VALUE
El ancho o el alto eran negativos.
GL_INVALID_OPERATION
format se GL_COLOR_INDEX y los búferes de color almacenan componentes de color RGBA o BGRA.
GL_INVALID_OPERATION
format se GL_STENCIL_INDEX y no había ningún búfer de galería de símbolos.
GL_INVALID_OPERATION
format se GL_DEPTH_COMPONENT y no había ningún búfer de profundidad.
GL_INVALID_OPERATION
Se llamó a la función entre una llamada a glBegin y la llamada correspondiente a glEnd.

Comentarios

La función glReadPixels devuelve datos de píxeles del búfer de fotogramas, empezando por el píxel cuya esquina inferior izquierda está en la ubicación (x, y), en la memoria del cliente a partir de los píxeles de ubicación. Varios parámetros controlan el procesamiento de los datos de píxeles antes de colocarlos en la memoria del cliente. Estos parámetros se establecen con tres comandos: glPixelStore, glPixelTransfer y glPixelMap. En este tema se describen los efectos en glReadPixels de la mayoría, pero no todos los parámetros especificados por estos tres comandos.

La función glReadPixels devuelve valores de cada píxel con esquina inferior izquierda en (x + i, y + j) para 0 = i <width y 0 = j <height. Este píxel se dice que es el píxel iés en la fila jth. Los píxeles se devuelven en orden de fila de la fila más baja a la fila más alta, de izquierda a derecha en cada fila.

Los factores de cambio, escala, sesgo y búsqueda descritos anteriormente se especifican mediante glPixelTransfer. GlPixelMap especifica el contenido de la tabla de búsqueda.

El último paso implica la conversión de los índices o componentes al formato adecuado, tal y como se especifica por tipo. Si el formato es GL_COLOR_INDEX o GL_STENCIL_INDEX y el tipo no es GL_FLOAT, cada índice se enmascara con el valor de máscara especificado en la tabla siguiente. Si el tipo es GL_FLOAT, cada índice entero se convierte en formato de punto flotante de precisión sencilla.

Si el formato es GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA, GL_RGB, GL_RGBA, GL_BGR_EXT, GL_BGRA_EXT, GL_LUMINANCE o GL_LUMINANCE_ALPHA y el tipo no se GL_FLOAT, cada componente se multiplica por el multiplicador que se muestra en la tabla anterior. Si el tipo es GL_FLOAT, cada componente se pasa tal cual (o se convierte al formato de punto flotante de precisión única del cliente si es diferente del que usa OpenGL).

Los valores devueltos se colocan en la memoria de la siguiente manera. Si el formato es GL_COLOR_INDEX, GL_STENCIL_INDEX, GL_DEPTH_COMPONENT, GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA o GL_LUMINANCE, se devuelve un valor único y los datos del píxel i de la fila jth se colocan en la ubicación (j )widthi + . GL_RGB y GL_BGR_EXT devuelven tres valores, GL_RGBA y GL_BGRA_EXT devuelven cuatro valores, y GL_LUMINANCE_ALPHA devuelve dos valores para cada píxel, con todos los valores correspondientes a un solo píxel que ocupa espacio contiguo en píxeles. Storage parámetros establecidos por glPixelStore, como GL_PACK_SWAP_BYTES y GL_PACK_LSB_FIRST, afectan a la forma en que los datos se escriben en la memoria. Consulte glPixelStore para obtener una descripción.

Los valores de los píxeles que se encuentran fuera de la ventana conectada al contexto actual de OpenGL no están definidos.

Si se genera un error, no se realiza ningún cambio en el contenido de píxeles.

La siguiente función recupera información relacionada con glReadPixels:

glGet con GL_INDEX_MODE de argumentos

Requisitos

Requisito Valor
Cliente mínimo compatible
Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible
Windows 2000 Server [solo aplicaciones de escritorio]
Encabezado
Gl.h
Biblioteca
Opengl32.lib
Archivo DLL
Opengl32.dll

Vea también

glBegin

glCopyPixels

glDrawPixels

glEnd

glPixelMap

glPixelStore

glPixelTransfer

glReadBuffer