Tutorial
Screenshots vom OpenGL-Fenster erstellen (und mit FreeImage speichern)
Hi, willkommen zu meinem sehr kleinen Tutorial. Ich werde euch hier erklären, wie ihr Screenshots eures OpenGL-Fensters erstellen und mit FreeImage speichern könnt.
An dieser Stelle auch ein großes Danke an volta, der mich auf eine Optimierungsmöglichkeit hingewiesen hat.
Warum wir hier FreeImage verwenden? Nunja, es ist eine prima Library. Sie unterstützt unzälige Formate, daher setze ich sie in meinen Programmen zum Laden von Texturen ein. Und wenn man sie schonmal eingebunden hat, kann man sie auch gleich zum Speichern verwenden, so muss man sich auch nicht selbst um das Format kümmern.
Der einzige Nachteil ist, dass die etwas große "FreeImage.dll" mitgeliefert werden muss.
Das erstellen des Screenshots ist ganz einfach, wenn man mal weiß wie es geht. Wir gehen folgendermaßen vor:
1. Wir lassen FreeImage ein neues Bild erstellen
2. Wir holen uns den Pointer auf den FreeImage-Bild-Puffer
3. Wir lesen den Inhalt des Fensters aus und speichern den Inhalt an der Stelle an die der Pointer zeigt
5. Wir speichern das FreeImage-Bild ab und geben den FreeImage-Puffer frei
Und hier kommt der Code:
#INCLUDE ONCE "FreeImage.bi"
sub TakeScreenshot (filename as STRING)
dim bitmap as FiBitmap ptr
dim FiDataPointer as any ptr
bitmap = FreeImage_Allocate(xres, yres, bits) '// Bild erstellen
FiDataPointer = FreeImage_GetBits(bitmap) '// Pointer auf Bilddaten holen
glReadPixels(0, 0, xres, yres, GL_BGRA, GL_UNSIGNED_BYTE, FiDataPointer) '// Pixel auslesen
FreeImage_Save(FIF_PNG, bitmap, strptr(filename), PNG_DEFAULT) '// Bild als PNG speichern
FreeImage_Unload(bitmap) '// Bild zerstören
end sub
So, wie man erkennen kann speichern wir hier als PNG. Das ist ein gutes Format, denn es ist komprimiert, aber ohne Qualitätsverlust.
Im Beispiel sind "xres", "yres" und "bits" globale integer-Variablen, die die Breite, Höhe und die Bits des Fensters beinhalten.
Das wars auch schon.
Euer darkinsanity
Zusätzliche Informationen und Funktionen |
- Das Tutorial wurde am 04.08.2009 von darkinsanity angelegt.
- Die aktuellste Version wurde am 12.07.2010 von darkinsanity gespeichert.
|
|