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 bestimmt 😕 vll 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 ?


Anmelden zum Antworten