opengl -> bitmap
-
Hallo
Ich versuch ein Opengl frame , in eine Textdatei zu speichern.(sowas wie screenshot)
mein code:
void __fastcall TForm1::Button24Click(TObject *Sender) { int height = Form2->Height; int widht = Form2->Width; int chan = 3; long groesse= height*widht*chan;; unsigned char *pdaten = new unsigned char[groesse]; unsigned char point; glReadPixels(0,0,widht, height,GL_RGB,GL_UNSIGNED_BYTE,pdaten) ; setheader(chan, height , widht); FILE *fp; fp = fopen("d:\\test.bmp", "w+b"); if(fp == NULL) { Application->MessageBoxA("File failed",MB_OK); return; } // RGB zu BGR for(unsigned int PixelID = 0; PixelID < groesse; PixelID += 1) { point = pdaten[PixelID]; pdaten[PixelID] = pdaten[PixelID+2]; pdaten[PixelID+2] = point; } fwrite(&filehead,sizeof(filehead)-2,1,fp); fwrite(&bmpinfo,sizeof(bmpinfo),1,fp); fwrite(pdaten,groesse,1,fp); Application->MessageBoxA("done","fertsch",MB_OK); fclose(fp); delete[] pdaten ; } //--------------------------------------------------------------------------- void TForm1::setheader(int Channels ,int height , int widht) { filehead.bfType = 0x4D42; filehead.bfSize = sizeof(BITMAPFILEHEADER)-2 + sizeof(BITMAPINFOHEADER) + (height*widht*Channels); filehead.bfReserved1 = 0; filehead.bfReserved2 = 0; filehead.bfOffBits = sizeof(BITMAPFILEHEADER)-2+ sizeof(BITMAPINFOHEADER); bmpinfo.biSize = sizeof(BITMAPINFOHEADER); bmpinfo.biWidth = Form2->Width; bmpinfo.biHeight = Form2->Height; bmpinfo.biPlanes = 1; bmpinfo.biBitCount = 24; bmpinfo.biCompression = BI_RGB; bmpinfo.biSizeImage = height*widht*Channels; bmpinfo.biXPelsPerMeter = 0; bmpinfo.biYPelsPerMeter = 0; bmpinfo.biClrUsed = 0 ; bmpinfo.biClrImportant = 0; }
so mit Infranview kann ich die datei zwar öffnen bleibt aber schwarz
wenn ich versuch das teil mit mspaint öffne kommt ne fehlermeldung (bezieht sich alles auf die bmp )gerendert wird das alles auf ein bcb Form, mit
glReadPixels(0,0,widht, height,GL_RGB,GL_UNSIGNED_BYTE,pdaten) ;
lese ich die pixel informationen, vll gibs ja noch ne andere Methode ?
sizeof(BITMAPFILEHEADER)-2 << das mach ich weil,
der bei mir den Fileheader mit einer größe von 16 statt 14 bestimmtvll weiß ja auch wer warum
mfg
thx 4 hlp
-
ok habs, das er jetz die datei richtig erstellt und auch was anzeigt
hab einfach selber den Fileheader, ohne die struktur BITMAPFILEHEADER zu benutzen, in die
datei geschrieben
if you want some done right, do it yourself
for(unsigned int PixelID = 0; PixelID < groesse; PixelID += chan) { point = pdaten[PixelID]; pdaten[PixelID] = pdaten[PixelID+2]; pdaten[PixelID+2] = point; }
^^ das sollte sie eigentlich von RGB nach BGR umwandeln, das ergebnis sieht nur nich ganz
richtig aus
so grau mit schwarzen streifen, vll weiß ja jemand wies richtig sein müsste
-
ich sollte in allen foren immer den selben benutzernamen nehmen
-me = maaaaan
-
wenn ich ein 2 tes Bild machn will erzeugt der mir wieder ne bitmap mit schwarzem inhalt ?