Screenshot in OpenGL
-
Hallo,
ich möchte einen Screenshot meiner Oberfläche machen und als File speichern. Im Anhang mal der Code. Kann mir jemand sagen, an welcher Stelle der Fehler liegt??? Das File wird zwar gespeichert, jedoch kann ich es nicht öffnen.
Karsten
bool TForm1::WriteTGA(char *file, short int width, short int height, unsigned char *outImage) { FILE *pFile; // The file pointer. unsigned char uselessChar; // used for useless char. short int uselessInt; // used for useless int. unsigned char imageType; // Type of image we are saving. int index; // used with the for loop. unsigned char bits; // Bit depth. long Size; // Size of the picture. int colorMode; unsigned char tempColors; pFile = fopen(file, "wb"); if(!pFile) { fclose(pFile); return false; } imageType = 2; colorMode = 3; bits = 24; uselessChar = 0; uselessInt = 0; fwrite(&uselessChar, sizeof(unsigned char), 1, pFile); fwrite(&uselessChar, sizeof(unsigned char), 1, pFile); fwrite(&imageType, sizeof(unsigned char), 1, pFile); fwrite(&uselessInt, sizeof(short int), 1, pFile); fwrite(&uselessInt, sizeof(short int), 1, pFile); fwrite(&uselessChar, sizeof(unsigned char), 1, pFile); fwrite(&uselessInt, sizeof(short int), 1, pFile); fwrite(&uselessInt, sizeof(short int), 1, pFile); fwrite(&width, sizeof(short int), 1, pFile); fwrite(&height, sizeof(short int), 1, pFile); fwrite(&bits, sizeof(unsigned char), 1, pFile); fwrite(&uselessChar, sizeof(unsigned char), 1, pFile); Size = width * height * colorMode; for(index = 0; index < Size; index += colorMode) { tempColors = outImage[index]; outImage[index] = outImage[index + 2]; outImage[index + 2] = tempColors; } fwrite(outImage, sizeof(unsigned char), Size, pFile); fclose(pFile); return true; } void TForm1::SaveTGAScreenShot(char *filename, int w, int h) { unsigned char *outputImage = 0; outputImage = (unsigned char*)malloc(w * h * 3); memset(outputImage, 0, w * h * 3); glReadPixels(0, 0, w, h, GL_RGB, GL_UNSIGNED_BYTE, outputImage); WriteTGA(filename, w, h, (unsigned char*)outputImage); free(outputImage); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { SaveTGAScreenShot("c://newtest.bmp", Form1->Width, Form1->Height); } //---------------------------------------------------------------------------
-
Hui, ne riesen Bildschreib-Funktion
Nimm doch stattdessen einfach
SDL_SaveBMP()
.
-
Soll das ein Trollversuch sein?!?
Karsten K schrieb:
[cpp]bool TForm1::WriteTGA(char *file, short int width, short int height, unsigned char *outImage)
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
SaveTGAScreenShot("c://newtest.bmp", Form1->Width, Form1->Height);[/cpp]
-
Wahrscheinlich bei den Daten im File.
Bye, TGGC (Pipe my World.)
-
durito schrieb:
Hui, ne riesen Bildschreib-Funktion
Nimm doch stattdessen einfach
SDL_SaveBMP()
.
schade ist, dass es kein SDL_SaveTGA oder SDL_SaveJPEG gibt..
-
hey, danke erste mal soweit ...
der erste fehler, den ich gefunden habe: ich vergass -> glReadBuffer(...);
ich kann das bild aber immer noch nicht öffnen ....
hat vieleicht irgendjemand a sample zum Thema "glReadBuffer() und glReadPixel()"???