0
我想在GLUT中執行屏幕捕獲,我遇到了一些問題。 glReadPixels()似乎崩潰我的程序與GLUT屏幕捕獲在C
Access violoation writing location 0x00000000
這是奇怪的是項目的根目錄中創建的文件,顯然是空的東西。我快速設置了一些printf命令,看起來代碼在glReadPixels()方法中每次崩潰。
我覺得這個問題可能是變量'像素'。我很難找出正確的方法來定義這個RGB值寫入它。
任何提示將不勝感激。
void savePPM(char ppmFileName[]){
int width = glutGet(GLUT_WINDOW_WIDTH);
int height = glutGet(GLUT_WINDOW_HEIGHT);
char *pixels = NULL;
glReadPixels(0,0, width, height, GL_RGB, GL_UNSIGNED_BYTE ,pixels);
ppmFile = fopen(ppmFileName, "wb");
fprintf(ppmFile, "P6\n");
fprintf(ppmFile, "%d %d\n", width, height);
fprintf(ppmFile, "255\n");
fwrite(pixels, 1, width*height*3, ppmFile);
fclose(ppmFile);
free(pixels);
}
與'3'在通話中的乘法'malloc'取決於像素格式。 '3'是24位像素。另外,爲了不使用'malloc',爲什麼不聲明像GLubyte pixels [PIXELSIZE];(其中'PIXELSIZE'是每個像素的字節數)的數組。 – 2012-02-01 07:10:37
在這種情況下,你必須小心設置'glPixelStorei(GL_PACK_ALIGNMENT,1);',OpenGL默認是考慮每行對齊的倍數爲4. – rotoglup 2012-02-01 08:22:19
@Joachim:是的,乘以3取決於像素格式,但我們在這裏用'GL_RGB'和'GL_UNSIGNED_BYTE'明確要求24位。聲明'GLubyte像素[PIXELSIZE]'只爲一個像素分配足夠的內存,而不是爲整個圖像分配足夠的內存 - 您需要動態分配帶有malloc(或其親屬之一)的數組或者使用大型靜態分配數組並且希望它足夠大。 – 2012-02-02 00:00:51