Wie bmp in GLubyte Array laden?
Frage
Alle,
Ich versuche, eine BMP-Datei in ein GLubyte Array zu laden (ohne aux).
Es ist unglaublich, wie das, was ich dachte, eine triviale Aufgabe Stunden meiner Zeit aufsaugt gewesen wäre, ist.
scheinen kann nicht alles auf Google zu finden!
Das ist, was ich gehackt zusammen, aber es ist nicht ganz arbeiten:
// load texture
GLubyte *customTexture;
string fileName("C:\\Development\\Visual Studio 2008\\Projects\\OpenGL_Test\\Crate.bmp");
// Use LoadImage() to get the image loaded into a DIBSection
HBITMAP hBitmap = (HBITMAP)LoadImage( NULL, (LPCTSTR)const_cast<char*>(fileName.c_str()), IMAGE_BITMAP, 0, 0,
LR_CREATEDIBSECTION | LR_DEFAULTSIZE | LR_LOADFROMFILE );
customTexture = new GLubyte[3*256*256]; // size should be the size of the .bmp file
GetBitmapBits(hBitmap, 3*256*256, (LPVOID) customTexture);
GetBitmapDimensionEx(hBitmap,&szBitmap);
Was passiert, ist der Aufruf von Loadimage scheint nicht definierten Wert zu zurückkehren (? NULL Ich bin, um herauszufinden, nicht in der Lage, wenn es tatsächlich ist die bmp Laden oder nicht - etwas verwirrt).
Im Moment bin BMPs roh dann bin Umwandlung es ist alles andere als einfach.
Wer hat besser und saubere Schnipsel?
Lösung
LoadImage()
können nur Bitmaps laden, die mit der Ressource-Compiler in die ausführbare Datei eingebettet sind - es kann keine externen Bitmaps aus dem Dateisystem geladen werden. Glücklicherweise sind die Bitmap-Dateien ganz einfach selbst zu lesen. Siehe Wikipedia für eine Beschreibung des Dateiformats.
Sie einfach die Datei öffnen, wie Sie es mit einer anderen Datei ( wichtig : Öffnen Sie es in Binär-Modus, dh mit der "rb"
Option fopen
oder die ios::binary
Flag den C ++ ifstream
verwenden), lesen Sie in die Bitmap-Dimensionen und in den Rohpixeldaten lesen.
Andere Tipps
Es ist eine gemeinsame Aufgabe, deshalb glaux unter anderem Sie Funktionen für sie gibt.
ein Bitmap zu lesen, ist eine triviale Angelegenheit, vor allem, wenn es nur eine Tiefe / bpp ist zu berücksichtigen.
Siehe auch diese Frage .