Ich will die Minimaptexturen aus dem 'common.MPQ'-file von WoW auslesen und ohne Umwege unter OpenGL als Textur verdenen. Problem dabei ist die Kompression.
Bisher habe ich folgenes:
1. common.MPQ wird geöffnet
2. das .BLP-file im MPQ-Archiv wird geöffnet
3. die Größe des .BLP-files wird ausgelesen und es wird ein Buffer mit der gleichen Größe angelegt.
4. das .BLP-file wird in dem Buffer gespeichert
5. Anhand der Dokumentation zu BLP2 unter ...
... weiß ich wo die komprimierten Rohdaten anfangen:
Offset 1172 bzw 0x494
dann sind bis zum Dateiende noch 32768Bytes
Ich teste mit common.MPQ\textures\minimap\00013a4985890dda616678 26be20ef36.blp.
Das sollte die erste Textur in der Liste sein wenn man in MyWarcraftStudio den Ordner öffnet.
Die Textur die ich zum Testen verwende ist 256x256 Pixel.
Unkomprimiert sollten die Daten 256*256*4Bytes (RGBA) = 262144Bytes sein.
262144Bytes / 32768Bytes = 8
Kompression ist also 1 : 8 was laut ...
S3 Texture Compression - Wikipedia, the free encyclopedia
... und Header auf DXT1 Kompression deutet.
Ich brauche diese Daten unkomprimiert in Form von:
00000000 R,G,B,A,R,G,B,A,R,G,B,A,R,G,B,A,
00000010 R,G,B,A,R,G,B,A,R,G,B,A,R,G,B,A,
... die Farben können auch verdreht sein, hauptsache die Daten sind erstmal unkomprimiert.
Was ich suche ist eine Kostenfreie Library für C++ die mir das Herumschlagen mit den Kompressionsverfahren abnimmt. Kennt jemand sowas?
Zur Not würde ich auch selbst Funktionen zum Dekompriemieren schreiben ... allerdings wären die dann sicher uneffektiv da ich nicht gerader ein Mathegenie bin und ich brauche einen schnellen Code.