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 ???
Speichern des OpenGL Bildes in ein BMP
-
- Beiträge: 170
- Registriert: 26. Januar 2009 09:19
- Wohnort: 127.0.0.2
@ Moderatoren & Admins: Sorry, aber was hat der Post hier zu suchen, das ist leider kein Qt...
@Klausn: Ich habe bisher aus OpenGL heraus nur mit Qt Bilder erstellt, habe deswegen keine wirkliche Idee woran es liegen könnte.
Oder vielleicht doch:
Als erstes bitte das ansehen:
http://en.wikipedia.org/wiki/Fwrite#fwrite
Daraus folgt, mache aus deinem FWrite mal:
Hast du auch bei den vorherigen FWrite's so gemacht fällt mir gerade auf... (sizeof(unsigned char) == 1 )
Hoffe, das hilft dir....
Mfg androphinx
@Klausn: Ich habe bisher aus OpenGL heraus nur mit Qt Bilder erstellt, habe deswegen keine wirkliche Idee woran es liegen könnte.
Oder vielleicht doch:
Als erstes bitte das ansehen:
http://en.wikipedia.org/wiki/Fwrite#fwrite
Daraus folgt, mache aus deinem FWrite mal:
Code: Alles auswählen
fwrite( image, Height*Width*3, sizeof(unsigned char), file );
Hoffe, das hilft dir....
Mfg androphinx
Code: Alles auswählen
unsigned char *image = (unsigned char*)malloc(sizeof(unsigned char)*Width*Height*3);
Code: Alles auswählen
FILE *file = fopen(fname, "wb");
Und drittens habe ich das bei mir mit einem Einzeiler gelöst:
Code: Alles auswählen
renderPixmap(x,y).save(filename); // http://doc.trolltech.com/4.4/qglwidget.html#renderPixmap
hth...