フルスクリーンのスクリーンショットを撮り、pngとして保存しようとしています。ここでコードを見つけて、少し修正しました。スクリーンショットにはopenGLとGlutを使用し、pngで保存するにはcのgdライブラリを使用します。私が得ているのは黒いpngだけで、その理由がわかりません。stackoverflow で検索したところ、いくつかの投稿が見つかりましたが、残念ながら役に立ちませんでした。それらの 1 つは glReadBuffer( GL_FRONT); を使用することでした。glReadBuffer(GL_BACK) の代わりに; 私はそれらの両方を試してみましたが、成功しませんでした。これが私のコードです:
int SVimage2file(char *filename){
int width = glutGet(GLUT_SCREEN_WIDTH);
int height = glutGet( GLUT_SCREEN_HEIGHT);
FILE *png;
GLubyte *OpenGLimage, *p;
gdImagePtr image;
unsigned int r, g, b;
int i,j,rgb;
png = fopen(filename, "wb");
if (png == NULL) {
printf("*** warning: unable to write to %s\n",filename);
return 1;
}
OpenGLimage = (GLubyte *) malloc(width * height * sizeof(GLubyte) * 3);
if(OpenGLimage == NULL){
printf("error allocating image:%s\n",filename);
exit(1);
}
printf("Saving to: %s .\n",filename);
glPixelStorei(GL_PACK_ALIGNMENT, 1);
glReadBuffer( GL_FRONT);
glReadPixels(0, 0, width, height, GL_RGB, GL_UNSIGNED_BYTE, OpenGLimage);
p = OpenGLimage;
image = gdImageCreateTrueColor(width,height);
for (i = height-1 ; i>=0; i--) {
for(j=0;j<width;j++){
r=*p++; g=*p++; b=*p++;
rgb = (r<<16)|(g<<8)|b;
//printf("the rgb color %d\n", rgb );
gdImageSetPixel(image,j,i,rgb);
}
}
gdImagePng(image,png);
fclose(png);
gdImageDestroy(image);
}
私が見逃しているのは何ですか?