glReadPixels 함수

glReadPixels 함수는 프레임 버퍼에서 픽셀 블록을 읽습니다.

구문

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

매개 변수

x

framebuffer에서 읽은 첫 번째 픽셀의 창 x 좌표입니다. y 좌표와 함께 픽셀 사각형 블록의 왼쪽 아래 모서리 위치를 지정합니다.

y

프레임 버퍼에서 읽은 첫 번째 픽셀의 창 y 좌표입니다. x 좌표와 함께 픽셀 사각형 블록의 왼쪽 아래 모서리 위치를 지정합니다.

width

픽셀 사각형의 너비입니다.

height(높이)

픽셀 사각형의 높이입니다. "1"의 너비 및 높이 매개 변수는 단일 픽셀에 해당합니다.

format

픽셀 데이터의 형식입니다. 다음과 같은 기호 값이 허용됩니다.

의미
GL_COLOR_INDEX
색 인덱스는 glReadBuffer에서 선택한 색 버퍼에서 읽습니다. 각 인덱스는 고정 지점으로 변환되고, GL_INDEX_SHIFT 값과 기호에 따라 왼쪽 또는 오른쪽으로 이동하고, GL_INDEX_OFFSET 추가됩니다. GL_MAP_COLOR GL_TRUE 인덱스는 테이블 GL_PIXEL_MAP_I_TO_I 매핑으로 대체됩니다.
GL_STENCIL_INDEX
스텐실 값은 스텐실 버퍼에서 읽습니다. 각 인덱스는 고정 지점으로 변환되고, GL_INDEX_SHIFT 값과 기호에 따라 왼쪽 또는 오른쪽으로 이동하고, GL_INDEX_OFFSET 추가됩니다. GL_MAP_STENCIL GL_TRUE 인덱스는 테이블 GL_PIXEL_MAP_S_TO_S 매핑으로 대체됩니다.
GL_DEPTH_COMPONENT
깊이 값은 깊이 버퍼에서 읽습니다. 각 구성 요소는 최소 깊이 값이 0.0에 매핑되고 최대 값이 1.0에 매핑되도록 부동 소수점으로 변환됩니다. 그런 다음 각 구성 요소를 GL_DEPTH_SCALE 곱하고, GL_DEPTH_BIAS 추가하고, 마지막으로 [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
처리는 색 버퍼가 색 인덱스를 저장하는지 또는 RGBA 색 구성 요소를 저장하는지에 따라 다릅니다. 색 인덱스가 저장되면 glReadBuffer에서 선택한 색 버퍼에서 읽습니다. 각 인덱스는 고정 지점으로 변환되고, GL_INDEX_SHIFT 값과 기호에 따라 왼쪽 또는 오른쪽으로 이동하고, GL_INDEX_OFFSET 추가됩니다. 그런 다음 인덱스는 GL_PIXEL_MAP_I_TO_R, GL_PIXEL_MAP_I_TO_G, GL_PIXEL_MAP_I_TO_B 및 GL_PIXEL_MAP_I_TO_A 테이블을 인덱싱하여 얻은 빨간색, 녹색, 파란색 및 알파 값으로 바뀝니다. RGBA 색 구성 요소가 색상 버퍼에 저장되면 glReadBuffer에서 선택한 색 버퍼에서 읽습니다. 각 색 구성 요소는 0의 강도가 0.0에 매핑되고 전체 강도가 1.0에 매핑되도록 부동 소수점으로 변환됩니다. 그런 다음 각 구성 요소에 GL_c_SCALE 곱하고 c가 GL_RED, GL_GREEN, GL_BLUE 및 GL_ALPHA 있는 GL_c_BIAS 추가됩니다. 각 구성 요소는 [0,1] 범위로 고정됩니다. 마지막으로 GL_MAP_COLOR GL_TRUE 경우 각 색 구성 요소 c는 테이블 GL_PIXEL_MAP_c_TO_c 매핑으로 대체됩니다. 여기서 c는 다시 GL_RED, GL_GREEN, GL_BLUE 및 GL_ALPHA. 각 구성 요소는 조회가 수행되기 전에 해당 테이블의 크기로 크기가 조정됩니다. 마지막으로 불필요한 데이터는 삭제됩니다. 예를 들어 GL_RED 녹색, 파란색 및 알파 구성 요소를 삭제하고 GL_RGB 알파 구성 요소만 삭제합니다. GL_LUMINANCE 단일 구성 요소 값을 빨간색, 녹색 및 파란색 구성 요소의 합계로 계산하고 알파를 두 번째 값으로 유지하면서 GL_LUMINANCE_ALPHA 동일한 작업을 수행합니다.

type

픽셀 데이터의 데이터 형식입니다. 다음 값 중 하나여야 합니다.

형식 인덱스 마스크 구성 요소 변환
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 없음 c

픽셀

픽셀 데이터를 반환합니다.

반환 값

이 함수는 값을 반환하지 않습니다.

오류 코드

glGetError 함수에서 다음 오류 코드를 검색할 수 있습니다.

Name 의미
GL_INVALID_ENUM
형식 또는 형식 이 허용되는 값이 아닙니다.
GL_INVALID_VALUE
너비 또는 높이가 음수였습니다.
GL_INVALID_OPERATION
형식 이 GL_COLOR_INDEX 색 버퍼는 RGBA 또는 BGRA 색 구성 요소를 저장했습니다.
GL_INVALID_OPERATION
형식 이 GL_STENCIL_INDEX 스텐실 버퍼가 없습니다.
GL_INVALID_OPERATION
형식 이 GL_DEPTH_COMPONENT 깊이 버퍼가 없습니다.
GL_INVALID_OPERATION
함수는 glBegin 호출과 glEnd에 대한 해당 호출 사이에 호출되었습니다.

설명

glReadPixels 함수는 왼쪽 아래 모서리가 위치(x, y)인 픽셀부터 시작하여 프레임 버퍼에서 픽셀 데이터를 위치 픽셀에서 시작하는 클라이언트 메모리로 반환합니다. 여러 매개 변수는 클라이언트 메모리에 배치되기 전에 픽셀 데이터의 처리를 제어합니다. 이러한 매개 변수는 glPixelStore, glPixelTransferglPixelMap의 세 가지 명령으로 설정됩니다. 이 항목에서는 대부분의 glReadPixels 에 미치는 영향에 대해 설명하지만, 이러한 세 가지 명령으로 지정된 모든 매개 변수는 아닙니다.

glReadPixels 함수는 0 = i <너비 및 0 = j 높이에 대해 왼쪽 아래 모서리가 있는 각 픽셀의 값을 반환합니다(x + i, y + j<). 이 픽셀은 j번째 행의 i번째 픽셀이라고 합니다. 픽셀은 각 행에서 왼쪽에서 오른쪽으로 가장 낮은 행에서 가장 높은 행으로 행 순서로 반환됩니다.

위에서 설명한 시프트, 배율, 바이어스 및 조회 요소는 모두 glPixelTransfer에 의해 지정됩니다. 조회 테이블 콘텐츠는 glPixelMap으로 지정됩니다.

마지막 단계는 형식에 지정된 대로 인덱스 또는 구성 요소를 적절한 형식으로 변환하는 것입니다. 형식이 GL_COLOR_INDEX 또는 GL_STENCIL_INDEX 형식이 GL_FLOAT 않으면 각 인덱스는 다음 표에 지정된 마스크 값으로 마스킹됩니다. 형식이 GL_FLOAT 경우 각 정수 인덱스가 단정밀도 부동 소수점 형식으로 변환됩니다.

형식이 GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA, GL_RGB, GL_RGBA, GL_BGR_EXT, GL_BGRA_EXT, GL_LUMINANCE 또는 GL_LUMINANCE_ALPHA 형식이 GL_FLOAT 않는 경우 각 구성 요소는 앞의 표에 표시된 승수를 곱합니다. 형식이 GL_FLOAT 경우 각 구성 요소가 있는 그대로 전달되거나 OpenGL에서 사용하는 것과 다른 경우 클라이언트의 단정밀도 부동 소수점 형식으로 변환됩니다.

반환 값은 다음과 같이 메모리에 배치됩니다. 형식이 GL_COLOR_INDEX, GL_STENCIL_INDEX, GL_DEPTH_COMPONENT, GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA 또는 GL_LUMINANCE 경우 단일 값이 반환되고 j번째 행의 i번째 픽셀에 대한 데이터가 위치(j )width + i에 배치됩니다. GL_RGB 및 GL_BGR_EXT 3개의 값(GL_RGBA 및 GL_BGRA_EXT 반환)을 반환하고, GL_LUMINANCE_ALPHA 각 픽셀에 대해 두 개의 값을 반환하며, 모든 값은 연속 공간을 픽셀 단위로 차지합니다. glPixelStore에서 설정한 스토리지 매개 변수(예: GL_PACK_SWAP_BYTES 및 GL_PACK_LSB_FIRST)는 데이터가 메모리에 기록되는 방식에 영향을 줍니다. 설명 은 glPixelStore 를 참조하세요.

현재 OpenGL 컨텍스트에 연결된 창 외부에 있는 픽셀의 값은 정의되지 않습니다.

오류가 생성되면 픽셀 내용이 변경되지 않습니다.

다음 함수는 glReadPixels와 관련된 정보를 검색합니다.

인수가 GL_INDEX_MODE glGet

요구 사항

요구 사항
지원되는 최소 클라이언트
Windows 2000 Professional[데스크톱 앱만]
지원되는 최소 서버
Windows 2000 Server[데스크톱 앱만]
헤더
Gl.h
라이브러리
Opengl32.lib
DLL
Opengl32.dll

추가 정보

glBegin

glCopyPixels

glDrawPixels

glEnd

glPixelMap

glPixelStore

glPixelTransfer

glReadBuffer