1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| FILE *file;
file = fopen( "picture.bmp" , "wb" );
if( !file )
return;
GLuint width, height;
SHeaderBMP header;
SHeaderBMPInfo headerinfo;
//get texture size
glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH,&width);
glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT,&height);
//set header
header.bfType[0] = 'B';
header.bfType[1] = 'M';
header.bfReserved1 = 0;
header.bfReserved2 = 0;
header.bfOffBits = sizeof(SHeaderBMPInfo) + sizeof(SHeaderBMP);
//set info header
headerinfo.biSize = sizeof(SHeaderBMPInfo);
headerinfo.biWidth = width;
headerinfo.biHeight = height;
headerinfo.biPlanes = 0;
headerinfo.biBitCount = 24; //RGB 8*3
headerinfo.biCompression = 0;
headerinfo.biSizeImage = 0;
headerinfo.biXPelsPerMeter = 0;
headerinfo.biYPelsPerMeter = 0;
headerinfo.biClrUsed = 0;
headerinfo.biClrImportant = 0;
//write headers
fwrite(&header,sizeof(SHeaderBMP),1,file);
fwrite (&headerinfo, sizeof (SHeaderBMPInfo), 1, file);
GLubyte *pixels;
pixels = new GLubyte[width*height*3];
glBindTexture(GL_TEXTURE_2D,texture);
glGetTexImage(GL_TEXTURE_2D,level,GL_BGR_EXT, GL_UNSIGNED_BYTE, pixels);
//write data
fwrite (pixels, width*height*3*sizeof(GLubyte), 1, file);
fclose (file);
delete pixels; |
Partager