Image im DDS Format speichern

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
Hoto
Beiträge: 294
Registriert: 01.09.2004 22:51

Image im DDS Format speichern

Beitrag von Hoto »

Hi,

ich programmiere mal wieder ein Modding Tool für ein Spiel und zwar geht es darum eine Skybox als einzelne PNG Bilder zu laden (erstellt mit Spacescape), diese in das passende Format für eine CubeMap zu konvertieren (oder zusammen kopieren/drehn) und als DDS CubeMap zu speichern.

Bis zum letzten Schritt ist alles klein Problem, das kann ich alles schon im Schlaf programmieren, aber das DDS Format macht mir Kopfzerbrechen. Ich habe zwar eine Routine für PB gefunden, mit der man über D3DX9 Funktionen ein DDS Bild reinladen kann und Microsofts MSDN Seite zeigt auch, dass es umgekehrt auch eine Funktion zum speichern gibt, aber ich tue mich mit derart Code, der nötig ist um ein PB Image in das entsprechende Datenformat zum speichern über D3DX9 zu kriegen, schon immer schwer und verstehe schon nicht die komplette Funktionsweise bei der Laderoutine, die ich hier habe.

Aber erst mal egal, es muss nicht über D3DX9 sein, mich würde erst mal interessieren ob es nicht bereits Codeschnippsel / UserLib oder sonst was für das DDS Format gibt (das Format ist ja inzwischen schon uralt), das ich bei meinem Projekt verwenden könnte. Meine Suche danach (de/en Forum und Google) blieb bisher leider ohne Erfolg. Bin ja schon froh wenigsten schon mal DDS laden zu können, nützt mir bei dem Tool allerdings nichts, kann ich jedoch für ein anderes Tool gut gebrauchen, bei dem ich nur DDS laden können muss.
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3857
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: Image im DDS Format speichern

Beitrag von bobobo »

Wenn mir gar nichts einfällt zum Konvertieren von Bildern dann nutz ich immer imagemagick

koscht nix und kann nahezu alles,

auf jeden Fall aber auch nach und von dds konvertieren.

ansonsten gibts im englishen board sowas für PB 4.20, keine ahnung, ob das wuppt

http://www.purebasic.fr/english/viewtop ... 49#p349249
‮pb aktuell5.7 - windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
Hoto
Beiträge: 294
Registriert: 01.09.2004 22:51

Re: Image im DDS Format speichern

Beitrag von Hoto »

Erstmal danke für die Antwort. ^^

Hatte mir auch schon überlegt im Notfall zu einem CMD Tool zu greifen und das dann entsprechend mit meinem Tool mit Daten zu füttern. Nur geht es da dann wieder los mit ob ich das Tool dann überhaupt mit meinem kostenlosen Tool vertreiben darf, wenn die Nutzer meines Tools dann erst noch auch noch das Tool downloaden müssen wäre das wirklich die aller aller letzte Lösung auf die ich zurückgreifen würde... wobei ich dann sogar eher auf das Tool an sich verzichten würde.

NVidia hat so ein CMD Tool in seinem SDK Paket für das DDS Format. Befürchte aber, dass da genau das Worst Case Scenario von oben zutreffen würde.

Imagemagick klingt nett, aber ich finde in den Optionen für das DDS Format keine Möglichkeit als DDS Cubemap zu speichern, würde also so oder so rausfallen, bin auf Cubemap Support angewiesen.

Den Code hatte ich sogar als einer der ersten ausprobiert und lief einfach nicht. Keine Fehlermeldung und nichts, aber es lädt keine DDS rein und zeigt es an. Keine Ahnung wo da der Fehler liegt, ist ja auch nur eine Laderoutine, eine solche habe ich ja danach noch gefunden (die hier hab ich per Google gefunden - weiß nicht ob es dazu einen Thread hier gibt?).

Bin die Tage leider selbst noch nicht weitergekommen.
Benutzeravatar
mpz
Beiträge: 497
Registriert: 14.06.2005 15:53
Computerausstattung: Win 10 Pro, 16 GB Ram, Intel I5 CPU und TI1070 Grafikkarte, PB 5.73 / 6.00 beta4
Wohnort: Berlin, Tempelhof

Re: Image im DDS Format speichern

Beitrag von mpz »

Hi,

das laden und speichern von DDS Files unter Windows kann man auch einfach mit meiner MP3D Engine realisieren. Ob das für Dich relevant ist must Du Dir mal ansehen...

Gruß Michael

Die Installation ist aber derzeit noch etwas tricky, da ich noch keine Installations routine für PB 5.22
fertig haben (Asche auf meien Haupt)

http://www.purebasic.fr/english/viewtop ... 27&t=43601

Also erst mal :Installer for the x86 only version
http://www.flasharts.de/mpz/Install_MP3D_32_x86.exe

dann manuell
Testversion for PB5.20 beta, please copy into the PureBasic5.20\SubSystems\dx9\purelibraries\userlibraries\ folder
http://www.flasharts.de/mpz/PB520/x86/MP3D_Library.zip

Hier das Demofile als exe
http://www.flasharts.de/mpz/DDS_laden.exe

Code: Alles auswählen


#Image_0 = 0
#Image_1 = 1
#Format_DDS = 4

If OpenWindow(0, 100, 100, 600, 300, "PureBasic - Image")
  
  MP_ScreenToHandle( WindowID(0))
  
  If CreateImage(#Image_0, 255, 255)

    StartDrawing(ImageOutput(0))
    
    For k=0 To 255
      FrontColor(RGB(k,0, k))  ; a rainbow, from black to pink
      Line(0, k, 255, 1)
    Next

    DrawingMode(#PB_2DDrawing_Transparent)
    FrontColor(RGB(255,255,255)) ; print the text to white !
    DrawText(40, 50, "An image easily created !")

    StopDrawing() ; This is absolutely needed when the drawing operations are finished !!! Never forget it !
    
  EndIf
  
  ; Save image to DDS file
  Image_Texture = MP_ImageToTexture (#Image_0)
  Savefile.s = SaveFileRequester("Bitte Dateinamen zum Speichern auswählen", "", "Grafik (*.dds)|*.dds", 0)
  MP_SaveTexture (Savefile, Image_Texture, #Format_DDS)
  
  ;load DDS file
  LoadFile.s = OpenFileRequester("Bitte DDS Datei zum Laden auswählen", "", "Grafik (*.dds)|*.dds", 0)
  DDS_Texture = MP_LoadTexture(LoadFile)
  MP_TexturetoImage (#Image_1, DDS_Texture) 
  
 
        
  Repeat
    Event = WaitWindowEvent()
    
    If Event = #PB_Event_Repaint
      StartDrawing(WindowOutput(0))
        DrawImage(ImageID(#Image_0), 20, 10)
        DrawImage(ImageID(#Image_1), 300, 10,255,255)
      StopDrawing()    
    EndIf
    
  Until Event = #PB_Event_CloseWindow  ; If the user has pressed on the close button
  
EndIf

End   ; All the opened windows are closed automatically by PureBasic

Working on - MP3D Engine -
Benutzeravatar
Hoto
Beiträge: 294
Registriert: 01.09.2004 22:51

Re: Image im DDS Format speichern

Beitrag von Hoto »

Danke, über deine MP3D Engine bin ich auch schon früh bei meiner Suche gestolpert, aber das scheint mir etwas überzogen das lediglich für das speichern einer DDS Cubemap zu verwenden. ^^

Ich schaue mir gerade noch mal näher die D3DX9 Funktionen an, wenn ich da besser verstehe wie das funktioniert, vor allem auch die Laderoutine, die ich hier habe, sollte es sich damit auch machen lassen und DX9 sollte eigentlich jeder Spieler eh auf seinem Windows Rechner haben, zumal das Spiel, wofür ich den Konverter bauen will, eh selbst DX9 nutzt.

Mich wundert es aber echt, dass man zu PB nicht längst einen Code findet, das DDS Format ist ja über 10 Jahre alt und doch relativ weit verbreitet (ich finde das Format jedenfalls immer wieder auch bei neueren Spielen und kenne es auch seit über 10 Jahren).
Antworten