Bilder und Fonts in exe einbauen oder in Packages
Übersicht

BarbapapaBetreff: Bilder und Fonts in exe einbauen oder in Packages |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi, habe jetzt doch BMax gekauft, und gefällt mir viel besser also die Demo ![]() ![]() was ich noch nicht rausfinden konnte, wie kann man Fonts und Bilder nicht offen rumliegen haben, also entweder in der exe eingebaut oder als separates geschütztes Archiv. Meine Vermutung würde lauten alles in einem grossem Paket packen und dann von da aus in den Speicher und dann eventuell decrypten und dann den Funktionen zuweisen? Aber wie weise ich z.B dem Befehl LoadFont eine Adresse zu und nicht nur eine URL oder einen Filenamen oder schreibe ich Unsinn oder gibt es dazu ein Tutorial. In GM habe ich das so gelöst, Teile in der exe eingebunden andere Teile oder in Archiv, dann bei Bedarf ALLES entpacken, laden und schnell wieder löschen). Anders geht es da nicht. Am allerliebsten wäre mir alles in externen geschützten Paketen zu haben und dann bei Bedarf Teile davon in den Speicher zu zu laden und zu verwenden. Bis denne |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Schau mal nach incbin ![]() |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
Barbapapa |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
BladeRunner hat Folgendes geschrieben: Schau mal nach incbin
![]() yo, soviel zum Thema in exe einbinden, cool gelöst, und fürs extern halten habe ich MPacker von filax gefunden, obwohl es wohl noch Schwierigkeiten mit dem Mac geben soll. Hach wenn bloss die Doku besser wäre, ach ach ach <seufz> ![]() Edit: Banks dürften helfen oder??? |
||
![]() |
FOODy |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also ich hab dafür ein kleinen Packer geschrieben. (Eigentlich nichts besonderes, aber ich brauch nicht mehr ![]() Vllt hilft dir das etwas weiter. (für test.png irgendein PNG-bild) Code: [AUSKLAPPEN] SuperStrict
Type TPacker Field _stream:TStream Field _files:TList = New TList Method Delete() If _stream Then _stream.Close() EndMethod Method BeginWrite(file:String) If _stream Then _stream.Close() _stream = WriteStream(file) EndMethod Method BeginRead(file:String) If _stream Then _stream.Close() If _files Then _files.clear() _stream = ReadStream(file) EndMethod Method WriteFile:Int(file:Object,fileid:String = "") If Not _stream Return False If fileid="" fileid = file.toString() Local stream:TStream = ReadStream(file) If Not stream Return False Local bank:TBank = CreateBank(stream.size()) Local dest:TBank = CreateBank(stream.size()*1.001+12) ReadBank(bank,stream,0,bank.size()) stream.Close() Local Size:Int = dest.size() compress(dest.buf(),Size,bank.buf(),bank.size()) fileid = _encode(fileid) _stream.WriteShort(fileid.length) _stream.WriteString(fileid) _stream.WriteInt(Size) _stream.WriteInt(bank.size()) WriteBank(dest,_stream,0,Size) Return True EndMethod Method WriteDir:Int(dir:String,subdirs:Byte = True,rep:String = "") Local dr:Int = ReadDir(dir) Local count:Int = 0 Repeat Local file:String = NextFile(dr) If file = "" Exit If Not file.Replace(".","") Continue file = Replace(dir+"/"+file,"//","/") If(FileType(file)=FILETYPE_DIR) If rep count:+WriteDir(file,subdirs,rep) Else count:+WriteDir(file,subdirs,dir) EndIf ElseIf(FileType(file)=FILETYPE_FILE) If Self.WriteFile(file,Replace(file,rep,"")) count:+1 EndIf Forever Return count EndMethod Method ReadFile:TBankStream(file:String) If Not _stream Return Null _stream.seek(0) Local _file:TPackerFile = CachedFile(file) If _file _file._bankstream.seek(0) Return _file._bankstream EndIf Repeat Local filename:String = _decode(_stream.readstring(_stream.readshort())) If(filename=file) Local Size:Int = _stream.ReadInt() Local dest_size:Int = _stream.ReadInt() Local bank:TBank = CreateBank(Size) Local dest:TBank = CreateBank(dest_size) _file = New TPackerFile _files.addlast _file _file._pos = _stream.Pos() _file._file = filename _file._stream = _stream _file._size = Size _file._dest_size = dest_size ReadBank(bank,_stream,0,Size) uncompress(dest.buf(),dest_size,bank.buf(),Size) _file._bankstream = CreateBankStream(dest) Return _file._bankstream EndIf _stream.seek(_stream.pos()+_stream.ReadInt()+4) Until Eof(_stream) Return Null EndMethod Method Read:Int() Local _file:TPackerFile Local count:Int _stream.seek(0) Repeat Local filename:String = _decode(_stream.readstring(_stream.readshort())) _file = CachedFile(filename) If(_file) _stream.seek(_stream.pos()+_stream.ReadInt()+4) count:+1 Else Local Size:Int = _stream.ReadInt() Local dest_size:Int = _stream.ReadInt() _file = New TPackerFile _files.addlast _file _file._pos = _stream.Pos() _file._file = filename _file._size = Size _file._dest_size = dest_size _file._stream = _stream _stream.seek(_stream.Pos()+Size) count:+1 EndIf Until _stream.eof() Return count EndMethod Method GetStream:TBankStream(file:String) Local _file:TPackerFile = CachedFile(file) If Not _file Return Null Local stream:TBankStream = _file.GetStream() stream.seek(0) Return stream EndMethod Method CachedFile:TPackerFile(file:String) For Local f:TPackerFile=EachIn _files If f._file=file Return f Next Return Null EndMethod Method Close() If _stream Then _stream.Close() EndMethod Method _encode:String(str:String) Local tmp_str:String = "" For Local i:Int=0 Until str.length tmp_str:+Chr(str[i]+i) Next Return tmp_str EndMethod Method _decode:String(str:String) Local tmp_str:String = "" For Local i:Int=0 Until str.length tmp_str:+Chr(str[i]-i) Next Return tmp_str EndMethod Function PackDir(dir:String,dest:String,subdirs:Byte = True) Local p:TPacker = New TPacker p.BeginWrite(dest) p.WriteDir(dir) p.Close() EndFunction EndType Type TPackerFile Field _file:String Field _pos:Int Field _size:Int Field _dest_size:Int Field _bankstream:TBankStream Field _stream:TStream Method GetStream:TBankStream() If _bankstream Return _bankstream _stream.seek(_pos) Local bank:TBank = CreateBank(_size) Local dest:TBank = CreateBank(_dest_size) ReadBank(bank,_stream,0,_size) uncompress(dest.buf(),_dest_size,bank.buf(),_size) _bankstream = CreateBankStream(dest) _bankstream.seek(0) Return _bankstream EndMethod EndType ' ---------------------------------------------------------- Graphics 800,600,0 Local pk:TPacker = New TPacker ' Packer Instanz erstellen pk.BeginWrite("test.pk") ' Das Schreiben beginnen pk.WriteFile("test.png") ' Datei hinzufügen pk.Close() ' Schließen pk.BeginRead("test.pk") ' Lesemodus Local image:TImage = LoadImage(pk.ReadFile("test.png")) ' Datei in den RAM als BankStream auslesen pk.Close() ' Schließen Repeat Cls DrawImage image,0,0 Flip Until AppTerminate() Or KeyDown(KEY_ESCAPE) EDIT: Zitat: Edit: Banks dürften helfen oder??? Ja, genau die verwende ich in meinem packer auch. Gruß, FOODy |
||
BlitzMax + MaxGUI, 64-bit Arch Linux: Intel Core² E8500 | 8 GB Ram | GeForce GTX 460 · 1024 MB |
klepto2 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Schau dir mal meinen Packer an: https://www.blitzforum.de/showcase/?project=73
Der Code wird auch bald veröffentlicht, so das man es auch auf dem Mac testen kann. die Gui ist noch sehr notdürftig, da ich im Moment wenig Zeit hatte. Aber mein Packer zipped die Dateien gleichzeitig, verschlüsselt sie und das Pack kann Passwort geschützt werden. Dazu besitzt das Modul eine eigene Baumstruktur (Directory) also von der anwendung ähnlich wie incbin. |
||
Matrix Screensaver
Console Modul für BlitzMax KLPacker Modul für BlitzMax HomePage : http://www.brsoftware.de.vu |
Barbapapa |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@Mr. FOODS: hey super ich liebe code Besipiele, sieht ja doch komplexer aus, ziehe ich mir rein.
@klepto2: cool, ja das mit dem Mac, testen müssten es dann die Macianer, weiss gar nicht ob Filax seinen Packer weiterentwickelt, bin immer wieder erstaunt wieviel man doch beachten muss, wenn es portabel sein soll. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group