私はGLUTでスクリーンキャプチャをしようとしていますが、少し問題があります。 glReadPixels()はCのGLUTスクリーンキャプチャ
Access violoation writing location 0x00000000
奇妙であるプロジェクトのルートに作成されたファイルであり、かつ、明らかに空である事を私のプログラムをクラッシュさせるようです。いくつかのprintfコマンドをすばやく設定しました。glReadPixels()メソッドの実行中にコードがクラッシュするようです。
私はこの問題を多分変数 'pixels'と感じています。 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);
}
malloc' 'の呼び出しに '3'との乗算は、ピクセルフォーマットに依存します。 「3」は24ビットピクセル用です。また、 'malloc'を使う代わりに' GLubyte pixels [PIXELSIZE]; '(' PIXELSIZE'はピクセルあたりのバイト数です)のような配列を宣言してください。 –
この場合、 'glPixelStorei(GL_PACK_ALIGNMENT、1);'の設定に注意する必要があります。OpenGLのデフォルトは各行が4の倍数に整列しているとみなすことです。 – rotoglup
@Joachim:はい、3倍はピクセルに依存します我々は明示的に 'GL_RGB'と' GL_UNSIGNED_BYTE'で24ビットを求めています。 'GLubyteピクセル[PIXELSIZE]'を宣言すると、イメージ全体ではなく、1ピクセルに十分なメモリしか割り当てられないので、 'malloc'(またはその親戚の1つ)で配列を動的に割り当てるか、それは十分に大きいです。 –