2011-07-06 2 views
3

내 윈도우 시스템이 일부 이미지를 화면에 출력하기 위해 GLUT를 사용하고 있습니다. 이미지를 파일로 출력하고 싶습니다. 이것은 도전이었습니다. 일부 창 해상도 (예 : 256x256, 1024x1024, 1920x1200)에서는 glReadPixels가 화면과 동일한 이미지 파일을 생성합니다. 그러나 나는 창 크기를 조정 (예/655x652, 529x566 화면 캡처를 수행 할 때, 이미지는 zagged하고 픽셀이 선형으로 이동 한 것 같다glReadPixels를 사용한 스크린 캡쳐는 일부 윈도우 해상도에서 픽셀 이동을 가져옵니다.

어떤 도움을 이해할 수있을 것이다

편집 -.! 나는 몇 가지 코드를 추가하고 glReadPixels에 이르기까지의 전화

glGetIntegerv(GL_VIEWPORT, dimensions); 
width = dimensions[2]; 
height = dimensions[3]; 
screencapture = (unsigned char*)malloc(width*height*sizeof(unsigned char)); 
glReadPixels(0,0,width, height, GL_GREEN, GL_UNSIGNED_BYTE, screencapture); 

EDIT2 -.. 내가 몇 번 좋은 이미지를 생성 할 마우스로 창 크기를 조정 언급하는 것을 잊었다 내가 바로 해상도를 얻을 때 그런 일이 생각

+3

당신이 재생되지했다고 가정하면'glPixelStore' (예를 들어'GL_PACK_ALIGNMENT')이 (나를 위해 어쨌든 작동) 잘 작동합니다. 설명은 픽셀 데이터를 저장할 때 잘못된 너비를 가정하는 것처럼 들립니다. 어쩌면 일부 코드가 도움이 될 수도 있습니다 (정확히 무엇이 잘못되었는지 알지 못해 어떤 문제가 발생했는지 알기 어렵습니다). – Damon

+0

안녕 데이먼, 도와 줘서 고마워. 방금 일부 코드를 추가했습니다. 그리고 네가 맞습니다. GL_PACK_ALIGNMENT을 가지고 노는 것은 아닙니다. – b1gtuna

+1

우리가 간다. 초록색 채널, 즉 __bytes__을 (를) 읽고 있습니다. GL_PACK_ALIGNMENT는 [초기 값은 4] (http://www.opengl.org/sdk/docs/man3/xhtml/glGet.xml)입니다 (대부분의 사람들이 32 비트 값을 읽기 때문에 적절한 기본값입니다). 즉, 너비가 4의 배수가 아닌 경우 행 끝에 여분의 바이트가 있습니다 (이 값을 고려하지 않으면 다음 행이 오프셋됩니다). 하나의 채널 만 읽는 것이 위험하거나 고의적입니까? – Damon

답변

3

을. y에 대한 해답 우리의 문제는 각 행 끝에 4 바이트의 너비가 아닌 (건너 뛰기) 여분의 바이트를 고려하거나 GL_PACK_ALIGNMENT을 1로 변경하는 것입니다 (glPixelStore 사용).

(내 위의 설명을 참조)

+0

굉장한! 힘든 여정의 4 시간은 영광스럽게 끝납니다 : D. Thx Damon. – b1gtuna

관련 문제