|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
DirectXer Dark JLI'ler
Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 06.05.2006, 22:06 Titel: [DX] IDirect3DTexture9 eines eigenen Dateiformates |
|
|
Hi Leuzz.
Ich hab mir ein eigenes, verschlüsseltes Dateiformat (.bncf) für Bilder programmiert. Konvertieren in versch. andere Formate hab ich schon, aber es geht darum, dass ich von dieser Datei eine IDirect3DTexture9 bekommen will. Natürlich kann ich D3DXCreateTextureFromFileEx() net nehmen, die kennen mein Format ja net. Ich hab mir das so gedacht: Ich lade mein Format und konvertiere schnell in ein DIB. Die einzelnen Bestandteile zu kriegen ist kein Problem. Ich brauche nur eine Funktion, die mir von einer geräteunabhängigen Bitmap (also .bmp DIB, wie immer) im Programm eine IDirect3DTexture9macht. In der MSDN hab ich D3DXCreateTextureFromFileInMemoryEx() oder so gefunden, ich bin mir jedoch net sicher, ob das die richtige ist und wie ich das so machen könnte. Kennt ihr die Funktion die ich suche? Oder wie ich das sonst machen kann?
Gruß DXer |
|
Nach oben |
|
|
GreveN JLI Master
Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 06.05.2006, 22:41 Titel: |
|
|
Kenn mich jetzt zwar mit D3D nicht aus, aber sollte doch kein Problem sein, die BMP einfach zu laden (also den Datenblock, ist ja nichtmal komprimiert oder so), und dann mittels einer D3D-Funktion in eine kompatible Textur umzuwandeln...
Das Device stellt doch eine Methode 'CreateTexture' zu Verfügung soweit ich weiß, damit eine Textur erzeugen, die dann locken und den Datenblock reinkopieren.
Achja, BMP speichert die Bilder afaik verkehrt herum... |
|
Nach oben |
|
|
DirectXer Dark JLI'ler
Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 06.05.2006, 22:56 Titel: |
|
|
erstmal thx für die schnelle Antwort am Abend
GreveN hat Folgendes geschrieben: | Kenn mich jetzt zwar mit D3D nicht aus, aber sollte doch kein Problem sein, die BMP einfach zu laden (also den Datenblock, ist ja nichtmal komprimiert oder so), und dann mittels einer D3D-Funktion in eine kompatible Textur umzuwandeln... | diese Funktion such ich ja Also ich kenne D3D-Funktionen, die einem eine Textur von einer Datei außerhalb geben, egal ob bmp, jpg, usw. Aber eine Funktion, der man die bmp o.Ä. einfach übergibt... naja. Ich könnte natürlich mein Format laden, in bmp umwandeln und speichern, textur erstellen und dann wieder die Datei löschen; aber dadurch gibts ein paar nachteile: viel zeitverlust, meine eigentlich geschützeten Dateien sind kurz als bmps vorhanden etc. Deshalb müsste es ja auch ne Funktion geben, die innerhalb erstellte Bitmaps o.Ä. annimmt
GreveN hat Folgendes geschrieben: | Das Device stellt doch eine Methode 'CreateTexture' zu Verfügung soweit ich weiß, damit eine Textur erzeugen, die dann locken und den Datenblock reinkopieren. |
naja, gibt mehrere Sachen die man da beachten muss. Man kann net einfach den Datenblock reinkopieren, mann muss den vorher anpassen, also umdrehen wenn nötig, von BGR nach RGB wenn nötig, dekomprimieren uswusf. Das ist ja eigentlich die Arbeit von DX, den DX kann ja Bitmaps von außerhalb auch umdrehen, dekompr. etc.
GreveN hat Folgendes geschrieben: | Achja, BMP speichert die Bilder afaik verkehrt herum... | naja, manchmal. Diese Information kann man abfragen bei BITMAPINFO::BITMAPINFOHEADER::biHeight; wenn positiv dann richtig herum, wenn negativ dann verkehrt herum
btw: bmps können auch komprimiert sein
Gruß DXer |
|
Nach oben |
|
|
GreveN JLI Master
Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 06.05.2006, 23:11 Titel: |
|
|
DirectXer hat Folgendes geschrieben: | GreveN hat Folgendes geschrieben: | Das Device stellt doch eine Methode 'CreateTexture' zu Verfügung soweit ich weiß, damit eine Textur erzeugen, die dann locken und den Datenblock reinkopieren. |
naja, gibt mehrere Sachen die man da beachten muss. Man kann net einfach den Datenblock reinkopieren, mann muss den vorher anpassen, also umdrehen wenn nötig, von BGR nach RGB wenn nötig, dekomprimieren uswusf. Das ist ja eigentlich die Arbeit von DX, den DX kann ja Bitmaps von außerhalb auch umdrehen, dekompr. etc. |
Frage, warum willst du überhaupt den Umweg über DIB/BMP machen? Du weißt doch wie dein Format aufgebaut ist, lade die Bilddaten doch einfach direkt und kopier den Block in eine gelockte Textur.
Btw.: So eine Bitmap API-ready zu kriegen ist auch nicht der hammermäßige Aufwand, BGR-RBG-Konvertierung und einmal horizontal spiegeln ist eigentlich mit wenigen Zeilen Code gemacht... Über evt. BMP-Komprimierung weiß ich nichts...
So gehts zumindest ohne D3DX. |
|
Nach oben |
|
|
Dr. Best Senior JLI'ler
Alter: 34 Anmeldedatum: 17.06.2004 Beiträge: 269 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 07.05.2006, 00:05 Titel: |
|
|
Also ich würde dafür auch einfach eine Textur mit IDirect3DDevice9::CreateTexture erstellen die dann locken und deine Daten da dann reindekomprimieren.
Du musst doch sowieso deine Daten in ein Feld von RGB Daten umwandeln.
Wenn du das aus irgendeinem Grund den ich nicht verstehe nicht machen willst kannst du auch ein Datenarray mit einer BMP erstellen und die dann direkt aus diesem Array mit D3DXCreateTextureFromFileInMemoryEx laden. Aber das fänd ich wirklich sinnlos . _________________
Ich bin da, wer noch? |
|
Nach oben |
|
|
DirectXer Dark JLI'ler
Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 07.05.2006, 08:49 Titel: |
|
|
nagut, dann mach ich das so mit createTextur. Ich dachte mir nur, wenn DX eine bmp per speicherpfad laden könne, müsste es auch innerhalb per Übergabe gehen
@GreveN
zur Bitmapkomprimierung, da gibts z.B. die Lauflängencodierun für 8Bit/Pixel und 4Bit/Pixel (BI_RLE4 und BI_RLE8) Da werden aufeinanderfolgende gleiche Pixelfarben unter einer zusammen gefasst; also aus 5mal 0x33 Code: | 0x33 0x33 0x33 0x33 0x33 | in einer unkomprimierten Bitmap wird in einer komprimierten Bitmap usw.
Gruß DXer, danke für die Hilfe |
|
Nach oben |
|
|
GreveN JLI Master
Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 07.05.2006, 09:47 Titel: |
|
|
Jau, klingt nach Standard RLE, ähnlich wie in TGA. |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 07.05.2006, 10:28 Titel: |
|
|
Ich glabue kaum das BMP Dateien verschlüsselt sein können. Jedenfalls nicht Standardbmp dateien. Andere Bitmaps wie zum Beispiel TGA unterstützen aber definitiv RLE Kompression.
CreateTexture ist wirklich easy, benutze ich bei meinem TGA Loader auch, funktioniert wunderbar und ist insgesamt mit Laden der TGA DAtei bloß 1,5 Seiten, also wirklich nicht viel. Farbkonvertierung und so geht auch schnell, ist eine einzige Schleife mehr net. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
DirectXer Dark JLI'ler
Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 07.05.2006, 12:43 Titel: |
|
|
Jonathan_Klein hat Folgendes geschrieben: | Ich glabue kaum das BMP Dateien verschlüsselt sein können. | verschlüsselt net, aber komprimiert. siehe dazu Petzold s.698, da steht die lauflängencodierung (gibt noch andere für BMP) ausführlich beschrieben.
Jonathan_Klein hat Folgendes geschrieben: | Jedenfalls nicht Standardbmp dateien. |
was verstehst du unter "Standardbmp"? Geräteunabhängige bmps, wie sie gespeichert werden, sind DIB. d.h. alle Bitmaps, die du mit der endung .bmp auf deinem PC findest, sind DIBs (DDBs sind geräteabhängig und können deshalb net gespeichert werden). Laut MSDN und Petzold können DIBs, (für mich die "standard-bmps") komprimiert werden. Wozu sonst sollte es im BITMAPINFOHEADER eine Variable biCompression geben, wo die Komprimierungsart drin steht. Wenn du mit "Standardbmp"s DDBs meinst, dann hast du in gewisser Weise recht. Die werden net komprimiert. Aber was würde es auch für einen Sinn machen, geräteabhängige Bitmaps, die zur Laufzeit erstellt und auch zur Laufzeit wieder zerstört werden, zu komprimieren `
Gruß DXer |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|