Speichern des OpenGL Bildes in ein BMP
Verfasst: 11. Februar 2009 16:37
Hi zusammen...
ich will ein OpenGL in ein bmp File speichern .. und nutze dazu folgenden Code:
int OpenGLLLL::uebergabe(int x, int y, int Width, int Height, const char *fname)
{
BITMAPFILEHEADER bf;
BITMAPINFOHEADER bi;
unsigned char *image = (unsigned char*)malloc(sizeof(unsigned char)*Width*Height*3);
FILE *file = fopen(fname, "wb");
if( image!=NULL )
{
if( file!=NULL )
{
int* viewport = new int[4];
glGetIntegerv(GL_VIEWPORT, viewport);
glReadPixels( x, y, Width, Height, GL_RGB, GL_UNSIGNED_INT, &image );
memset( &bf, 0, sizeof( bf ) );
memset( &bi, 0, sizeof( bi ) );
bf.bfType = 'MB';
bf.bfSize = sizeof(bf)+sizeof(bi)+Width*Height*3;
bf.bfOffBits = sizeof(bf)+sizeof(bi);
bi.biSize = sizeof(bi);
bi.biWidth = Width;
bi.biHeight = Height;
bi.biPlanes = 1;
bi.biBitCount = 24;
bi.biSizeImage = Width*Height*3;
fwrite( &bf, sizeof(bf), 1, file );
fwrite( &bi, sizeof(bi), 1, file );
fwrite( image, sizeof(unsigned char), Height*Width*3, file );
fclose( file );
}
free( image );
}
return 0;
}
Das funktioniert soweit auch ... aber es kommt nur ein schwarzes bild zustande mit bunten pixeln am unteren Bildschirmrand. Wenn ich makeCurrent() benutze , stürzt das komplette Programm ab ! Ich habe keine Ahnung woran das liegt. Hat vielleicht jemand eine Idee ???
ich will ein OpenGL in ein bmp File speichern .. und nutze dazu folgenden Code:
int OpenGLLLL::uebergabe(int x, int y, int Width, int Height, const char *fname)
{
BITMAPFILEHEADER bf;
BITMAPINFOHEADER bi;
unsigned char *image = (unsigned char*)malloc(sizeof(unsigned char)*Width*Height*3);
FILE *file = fopen(fname, "wb");
if( image!=NULL )
{
if( file!=NULL )
{
int* viewport = new int[4];
glGetIntegerv(GL_VIEWPORT, viewport);
glReadPixels( x, y, Width, Height, GL_RGB, GL_UNSIGNED_INT, &image );
memset( &bf, 0, sizeof( bf ) );
memset( &bi, 0, sizeof( bi ) );
bf.bfType = 'MB';
bf.bfSize = sizeof(bf)+sizeof(bi)+Width*Height*3;
bf.bfOffBits = sizeof(bf)+sizeof(bi);
bi.biSize = sizeof(bi);
bi.biWidth = Width;
bi.biHeight = Height;
bi.biPlanes = 1;
bi.biBitCount = 24;
bi.biSizeImage = Width*Height*3;
fwrite( &bf, sizeof(bf), 1, file );
fwrite( &bi, sizeof(bi), 1, file );
fwrite( image, sizeof(unsigned char), Height*Width*3, file );
fclose( file );
}
free( image );
}
return 0;
}
Das funktioniert soweit auch ... aber es kommt nur ein schwarzes bild zustande mit bunten pixeln am unteren Bildschirmrand. Wenn ich makeCurrent() benutze , stürzt das komplette Programm ab ! Ich habe keine Ahnung woran das liegt. Hat vielleicht jemand eine Idee ???