Mehrere Daten in einer Datei fassen

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Mathias-Kwiatkowski

Betreff: Mehrere Daten in einer Datei fassen

BeitragSo, Aug 05, 2012 16:21
Antworten mit Zitat
Benutzer-Profile anzeigen
hi , leute es gab bzw gibt die möglichkeit mithilfe von seekfile, eine position anzugeben (also inerhalb) einer datei.

nun habe ich ein folgendes problem. ich bekomms nich mehr zusammen. ich habe nun mehrere bilder oder fonts in einer seperaten datei. dies sieht wie folgt aus.

Datei: alleFiles.sav
1)Bild1 = 88000
2)
3)[Beginn]
4)alle bytes vom ersten bild


wie das bild heisst steht vorm = zeichen, die bytes die das bild hat nach dem = zeichen.
z.b. ich möchte bild 1 aufrufen. das wäre in der datei der beginn pos 4 , also 4. zeile.

so aber nun möchte ich es via loadimage einlesen
wie mache ich das am besten?

-< Offset = SeekFile (Dateistream, Pos) >-

Loadimage (???) <- und genau da komm ich nich weiter.

DAK

BeitragSo, Aug 05, 2012 16:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab sowas früher mal gemacht, da habe ich zuerst die Datei "entpackt", also die einzelnen Bilder einzeln rausgeschrieben, mit loadimage geladen und dann gelöscht. Das war aber noch zu B3D-Zeiten.

Für eine saubere Lösung bastel ich dir schnell eine Funktion zusammen, die das macht.
Gewinner der 6. und der 68. BlitzCodeCompo

Xeres

Moderator

BeitragSo, Aug 05, 2012 16:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist nicht nötig. Man kann die Bytes in eine Bank schieben und die bei Loadimage angeben.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Noobody

BeitragSo, Aug 05, 2012 16:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Du hast doch den Stream schon und hast alles, was vor dem Bild kommt, schon ausgelesen - dann kannst du ja einfach den Stream bei LoadImage angeben und bist fertig!
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun

Mathias-Kwiatkowski

BeitragSo, Aug 05, 2012 17:03
Antworten mit Zitat
Benutzer-Profile anzeigen
genau nobobody
.... nur sry der dummen frage, wie genau mache ich das?
 

CO2

ehemals "SirMO"

BeitragSo, Aug 05, 2012 17:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Du müsstest noch in die Zusammengefasste Datei schreiben, wie viele Bytes dein Bild groß ist.

Dann gehst du in der Datei via seekfile() zur Position an der das Bild "steht".
Nun lädst du die Daten in eine Bank und dann lädst du das Bild via LoadImage(Bank)
fertig Very Happy

Edit:
Hier mal eben eine schnell geschriebene Funktion BlitzMax: [AUSKLAPPEN]
Function ReadFromArchive:TBank(Archive:TStream, StartPos:Int, Size:Int)
Local ReturnBank:TBank = CreateBank() 'Diese Bank wird Returned
ReturnBank.Resize(Size) 'Bank vergrößern
ReturnBank.Read(Archive, StartPos, Size) 'Daten in Bank einlesen
Return ReturnBank 'Bank Returnen
End Function


und dein Bild lädst du dann via BlitzMax: [AUSKLAPPEN]
Global MeinBild:TImage = LoadImage(ReadFromArchive(DeinArchiv, 0, 1024)) 'Beispielwerte

Die Funktion müsstest du noch auf deine Bedürfnisse anpassen, sollte aber funktionieren Wink
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti
  • Zuletzt bearbeitet von CO2 am So, Aug 05, 2012 18:11, insgesamt 3-mal bearbeitet

Mathias-Kwiatkowski

BeitragSo, Aug 05, 2012 17:56
Antworten mit Zitat
Benutzer-Profile anzeigen
cool. danke. nun hat das edliche dateinsammeln im data ordner ein ende Very Happy danke dir!

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group